home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 008a / intr26b.zip / INTERRUP.D < prev    next >
Text File  |  1991-06-15  |  314KB  |  8,385 lines

  1. Interrupt List, part 4 of 5
  2. This compilation is Copyright (c) 1989,1990,1991 Ralf Brown
  3. ----------2F---------------------------------
  4. INT 2F - Multiplex - NOTES
  5.     AH = identifier of program which is to handle the interrupt
  6.        00h-7Fh reserved for DOS
  7.        C0h-FFh reserved for applications
  8.     AL is the function code
  9.    This is a general mechanism for verifying the presence of a TSR and 
  10.    communicating with it.  When searching for a free identifier code for AH
  11.    using the installation check (AL=00h), the calling program should set
  12.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  13.    and SS:SP to be valid on return, since numerous programs now use additional
  14.    registers on input and/or output for the installation check.
  15. ----------2F---------------------------------
  16. INT 2F - Multiplex - BMB Compuscience Canada Utilities Interface
  17.     AH = xx (dynamically assigned based upon a search for a multiplex
  18.          number which doesn't answer installed)
  19.     AL = 00h install check
  20.     ES:DI = EBEBh:BEBEh
  21. Return: AL = 00h not installed
  22.          01h not installed, not OK to install
  23.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  24.               to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  25.          short form of the manufacturer's name, PPPPPPPP is a product
  26.          name and NNNN is the product's version number
  27. ----------2F00-------------------------------
  28. INT 2F - Multiplex - DOS 2.x PRINT.COM - ???
  29.     AH = 00h
  30.     ???
  31. Return: ???
  32. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  33.     values in AH other than 00h or 01h cause PRINT to return the number of
  34.       files in the queue in AH
  35. SeeAlso: AH=01h
  36. ----------2F0080-----------------------------
  37. INT 2F - Multiplex - DOS 3.1+ PRINT.COM - GIVE PRINT A TIME SLICE
  38.     AX = 0080h
  39. Return: after PRINT executes
  40. ----------2F01-------------------------------
  41. INT 2F - Multiplex - DOS 2.x PRINT.COM - ???
  42.     AH = 01h
  43.     ???
  44. Return: ???
  45. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  46.     values in AH other than 00h or 01h cause PRINT to return the number of
  47.       files in the queue in AH
  48. SeeAlso: AH=00h
  49. ----------2F0100-----------------------------
  50. INT 2F - Multiplex - DOS 3+ PRINT.COM - INSTALLATION CHECK
  51.     AX = 0100h
  52. Return: AL = status
  53.         00h not installed
  54.         01h not installed, but not OK to install
  55.         FFh installed
  56. SeeAlso: AX=0101h
  57. ----------2F0101-----------------------------
  58. INT 2F - Multiplex - DOS 3+ PRINT.COM - SUBMIT FILE FOR PRINTING
  59.     AX = 0101h
  60.     DS:DX -> submit packet (see below)
  61. Return: CF clear if successful
  62.         AL = 01h added to queue
  63.          9Eh now printing
  64.     CF set on error
  65.         AX = error code (see also INT 21/AH=59h)
  66.         01h invalid function
  67.         02h file not found
  68.         03h path not found
  69.         04h out of file handles
  70.         05h access denied
  71.         08h print queue full
  72.         09h spooler busy
  73.         0Ch name too long
  74.         0Fh invalid drive
  75. SeeAlso: AX=0102h
  76.  
  77. Format of submit packet:
  78. Offset    Size    Description
  79.  00h    BYTE    level (must be 00h)
  80.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  81. ----------2F0102-----------------------------
  82. INT 2F - Multiplex - DOS 3+ PRINT.COM - REMOVE FILE FROM PRINT QUEUE
  83.     AX = 0102h
  84.     DS:DX -> ASCIZ filename (wildcards allowed)
  85. Return: CF clear if successful
  86.     CF set on error
  87.         AX = error code (see AX=0101h)
  88. SeeAlso: AX=0101h,AX=0103h
  89. ----------2F0103-----------------------------
  90. INT 2F - Multiplex - DOS 3+ PRINT.COM - CANCEL ALL FILES IN PRINT QUEUE
  91.     AX = 0103h
  92. Return: CF clear if successful
  93.     CF set on error
  94.         AX = error code (see AX=0101h)
  95. SeeAlso: AX=0102h
  96. ----------2F0104-----------------------------
  97. INT 2F - Multiplex - DOS 3+ PRINT.COM - FREEZE PRINT QUEUE TO READ JOB STATUS
  98.     AX = 0104h
  99. Return: CF clear if successful
  100.         DX = error count
  101.         DS:SI -> print queue
  102.     CF set on error
  103.         AX = error code (see AX=0101h)
  104. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  105.       an empty filename; the first name is the file currently being printed
  106.     printing is stopped until AX=0105h is called to prevent the queue
  107.       from changing while the filenames are being read
  108. SeeAlso: AX=0101h,AX=0105h
  109. ----------2F0105-----------------------------
  110. INT 2F - Multiplex - DOS 3+ PRINT.COM - RESTART PRINT QUEUE AFTER STATUS READ
  111.     AX = 0105h
  112. Return: CF clear if successful
  113.     CF set on error
  114.         AX = error code (see AX=0101h)
  115. SeeAlso: AX=0104h
  116. ----------2F0106-----------------------------
  117. INT 2F - Multiplex - DOS 3.3+ PRINT.COM - CHECK IF ERROR ON OUTPUT DEVICE
  118.     AX = 0106h
  119. Return: CF set on error
  120.         AX = error code
  121.         DS:SI -> device driver header
  122.     CF clear if successful
  123.         AX = 0000h
  124. Note:    eventually calls device driver for spooled device with request 0Ah,
  125.       looping until not busy or timeout
  126. SeeAlso: AX=0104h
  127. ----------2F0200-----------------------------
  128. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALL CHECK
  129.     AX = 0200h
  130. Return: AL = FFh if installed
  131. ----------2F0201-----------------------------
  132. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  133.     AX = 0201h
  134. Return: nothing???
  135. Notes:    called by DOS 3.3+ PRINT.COM
  136.     AX=0202h appears to be the opposite function
  137. SeeAlso: AX=0202h
  138. ----------2F0202-----------------------------
  139. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  140.     AX = 0202h
  141.     ???
  142. Return: nothing???
  143. Note:    called by DOS 3.3+ PRINT.COM
  144. SeeAlso: AX=0201h
  145. ----------2F0203-----------------------------
  146. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  147.     AX = 0203h
  148. Return: nothing???
  149. Notes:    called by DOS 3.3+ PRINT.COM
  150.     AX=0204h appears to be the opposite function
  151. SeeAlso: AX=0204h
  152. ----------2F0204-----------------------------
  153. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  154.     AX = 0204h
  155.     ???
  156. Return: nothing???
  157. Note:    called by DOS 3.3 PRINT.COM
  158. ----------2F---------------------------------
  159. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  160.     AX = 02xxh
  161.     ???
  162. Return: ???
  163. ----------2F0500-----------------------------
  164. INT 2F - Multiplex - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  165.     AX = 0500h
  166. Return: AL = 00h not installed, OK to install
  167.          01h not installed, can't install
  168.          FFh installed
  169. Note:    this set of functions allows a user program to partially or completely
  170.       override the default critical error handler's message in COMMAND.COM
  171. SeeAlso: AH=05h,INT 24
  172. ----------2F05-------------------------------
  173. INT 2F - Multiplex - DOS 3+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  174.     AH = 05h
  175. ---DOS 3.x---
  176.     AL = extended error code (not zero)
  177. ---DOS 4+ ---
  178.     AL = error type
  179.         01h DOS extended error code
  180.         02h parameter error
  181.     BX = error code
  182. Return: CF clear if successful
  183.         ES:DI -> ASCIZ error message (read-only)
  184.         AL = ???
  185.     CF set if error code can't be converted to string
  186. Notes:    called at start of COMMAND.COM's default critical error handler if 
  187.       installed by a user program, allowing partial or complete overriding
  188.       of the default error message
  189.     subfunction 02h called by many DOS 4 external programs
  190. SeeAlso: AX=122Eh,INT 24
  191. ----------2F0600-----------------------------
  192. INT 2F - Multiplex - DOS 3+ ASSIGN - INSTALLATION CHECK
  193.     AX = 0600h
  194. Return: AL = status
  195.         00h not installed
  196.         01h not installed, but not OK to install
  197.         FFh installed
  198. SeeAlso: AX=0601h
  199. ----------2F0601-----------------------------
  200. INT 2F - Multiplex - DOS 3+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  201.     AX = 0601h
  202. Return: ES = segment of ASSIGN work area and assignment table
  203. Note:    under DOS 3+, the 26 bytes starting at ES:0103h specify which drive
  204.       each of A: to Z: is mapped to.  Initially set to 01h 02h 03h....
  205. SeeAlso: AX=0600h
  206. ----------2F0800-----------------------------
  207. INT 2F - Multiplex - DRIVER.SYS support - INSTALLATION CHECK
  208.     AX = 0800h
  209. Return:    AL = 00h not installed, OK to install
  210.          01h not installed, not OK to install
  211.          FFh installed
  212. ----------2F0801-----------------------------
  213. INT 2F - Multiplex - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  214.     AX = 0801h
  215.     DS:DI -> drive data table (see AX=0803h)
  216. Notes:    moves down internal list of drive data tables, copying and modifying
  217.       the drive description flags word for tables referencing same physical
  218.       drive
  219.     data table appended to chain of tables
  220. SeeAlso: AX=0803h
  221. ----------2F0802-----------------------------
  222. INT 2F - Multiplex - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  223.     AX = 0802h
  224.     ES:BX -> device driver request header (see below)
  225. Return: request header updated as per requested operation
  226.  
  227. Format of device driver request header:
  228. Offset    Size    Description
  229.  00h    BYTE    length of request header
  230.  01h    BYTE    subunit within device driver
  231.  02h    BYTE    command code (see below)
  232.  03h    WORD    status (filled in by device driver)
  233.         bit 15: error
  234.         bits 14-11: reserved
  235.         bit 10: ??? set by DOS kernel on entry to some driver calls
  236.         bit 9: busy
  237.         bit 8: done
  238.         bits 7-0: error code if bit 15 set (see below)
  239. ---DOS---
  240.  05h  8 BYTEs    reserved (unused in DOS 2.x and 3.x)
  241. ---STARLITE architecture---
  242.  05h    DWORD    pointer to next request header
  243.  09h  4 BYTEs    reserved
  244. ---command code 00h---
  245.  0Dh    BYTE    number of units (set by driver)
  246.  0Eh    DWORD    address of first free byte following driver (set by driver)
  247.  12h    DWORD    pointer to BPB array (set by block drivers only)
  248.  16h    BYTE    (DOS 3+) drive number for first unit of block driver (0=A)
  249. ---command code 01h---
  250.  0Dh    BYTE    media descriptor
  251.  0Eh    BYTE    returned status
  252.         00h don't know
  253.         01h media has not changed
  254.         FFh media has been changed
  255.  0Fh    DWORD    (DOS 3+) pointer to previous volume ID if OPEN/CLOSE/RM bit in
  256.           device header set and disk changed (set by driver)
  257. ---command code 02h---
  258.  0Dh    BYTE    media descriptor
  259.  0Eh    DWORD    transfer address
  260.         -> scratch sector if NON-IBM FORMAT bit in device header set
  261.         -> first FAT sector otherwise
  262.  12h    DWORD    pointer to BPB (set by driver)
  263. ---command codes 03h,0Ch---
  264.  0Dh    BYTE    media descriptor (block devices only)
  265.  0Eh    DWORD    transfer address
  266.  12h    WORD    byte count (character devices) or sector count (block devices)
  267.  14h    WORD    starting sector number (block devices only)
  268. ---command codes 04h,08h,09h---
  269.  0Dh    BYTE    media descriptor (block devices only)
  270.  0Eh    DWORD    transfer address
  271.  12h    WORD    byte count (character devices) or sector count (block devices)
  272.  14h    WORD    starting sector number (block devices only)
  273.  16h    DWORD    (DOS 3+) pointer to volume ID if error 0Fh returned
  274. ---command code 05h---
  275.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  276. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  277.  no further fields
  278. ---command code 10h---
  279.  0Dh    BYTE    unused
  280.  0Eh    DWORD    transfer address
  281.  12h    WORD    byte count
  282. ---command codes 13h,19h---
  283.  0Dh    BYTE    category code
  284.         00h unknown
  285.         01h COMn:
  286.         03h CON
  287.         05h LPTn:
  288.         08h disk
  289.         9Eh (STARLITE) Media Access Control driver
  290.  0Eh    BYTE    function code
  291.         00h (STARLITE) MAC Bind request
  292.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  293.  11h    WORD    offset of device driver header
  294.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  295.  
  296. Values for command code:
  297.     00h INIT
  298.     01h MEDIA CHECK (block devices)
  299.     02h BUILD BPB (block devices)
  300.     03h IOCTL INPUT
  301.     04h INPUT
  302.     05h NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  303.     06h INPUT STATUS (character devices)
  304.     07h INPUT FLUSH (character devices)
  305.     08h OUTPUT
  306.     09h OUTPUT WITH VERIFY
  307.     0Ah OUTPUT STATUS (character devices)
  308.     0Bh OUTPUT FLUSH (character devices)
  309.     0Ch IOCTL OUTPUT
  310.     0Dh (DOS 3+) DEVICE OPEN
  311.     0Eh (DOS 3+) DEVICE CLOSE
  312.     0Fh (DOS 3+) REMOVABLE MEDIA (block devices)
  313.     10h (DOS 3+) OUTPUT UNTIL BUSY (character devices)
  314.     11h unused
  315.     12h unused
  316.     13h (DOS 3.2+) GENERIC IOCTL
  317.     14h unused
  318.     15h unused
  319.     16h unused
  320.     17h (DOS 3.2+) GET LOGICAL DEVICE
  321.     18h (DOS 3.2+) SET LOGICAL DEVICE
  322.     19h (DOS 5+) CHECK GENERIC IOCTL SUPPORT
  323.     80h (CD-ROM) READ LONG
  324.     81h (CD-ROM) reserved
  325.     82h (CD-ROM) READ LONG PREFETCH
  326.     83h (CD-ROM) SEEK
  327.     84h (CD-ROM) PLAY AUDIO
  328.     85h (CD-ROM) STOP AUDIO
  329.     86h (CD-ROM) WRITE LONG
  330.     87h (CD-ROM) WRITE LONG VERIFY
  331.     88h (CD-ROM) RESUME AUDIO
  332.  
  333. Values for error code:
  334.     00h write-protect violation
  335.     01h unknown unit
  336.     02h drive not ready
  337.     03h unknown command
  338.     04h CRC error
  339.     05h bad drive request structure length
  340.     06h seek error
  341.     07h unknown media
  342.     08h sector not found
  343.     09h printer out of paper
  344.     0Ah write fault
  345.     0Bh read fault
  346.     0Ch general failure
  347.     0Dh reserved
  348.     0Eh reserved
  349.     0Fh invalid disk change
  350. ----------2F0803-----------------------------
  351. INT 2F - Multiplex - DOS 4+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  352.     AX = 0803h
  353. Return: DS:DI -> first drive data table in list
  354. SeeAlso: AX=0801h
  355.  
  356. Format of DOS 3.30 drive data table:
  357. Offset    Size    Description
  358.  00h    DWORD    pointer to next table
  359.  04h    BYTE    physical unit number (for INT 13)
  360.  05h    BYTE    logical drive number
  361.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  362.         Offset    Size    Description
  363.          00h    WORD    bytes per sector
  364.          02h    BYTE    sectors per cluster, FFh if unknown
  365.          03h    WORD    number of reserved sectors
  366.          05h    BYTE    number of FATs
  367.          06h    WORD    number of root dir entries
  368.          08h    WORD    total sectors
  369.          0Ah    BYTE    media descriptor, 00h if unknown
  370.          0Bh    WORD    sectors per FAT
  371.          0Dh    WORD    sectors per track
  372.          0Fh    WORD    number of heads
  373.          11h    WORD    number of hidden sectors
  374.  19h    BYTE    flags
  375.          bit 6: 16-bit FAT instead of 12-bit FAT
  376.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  377.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  378.          fixed media)
  379.  27h    BYTE    terminating null for volume label???
  380.  28h    BYTE    device type (see INT 21/AX=440Dh)
  381.  29h    WORD    bit flags describing drive
  382.         bit 0: fixed media
  383.         bit 1: door lock supported
  384.         bit 2: ??? (used in determining BPB to set for INT 21/AX=440Dh)
  385.         bit 3: all sectors in a track are the same size
  386.         bit 4: physical drive has multiple logical units
  387.         bit 5: current logical drive for physical drive
  388.         bit 6: ???
  389.         bit 7: ???
  390.         bit 8: ??? (related to disk change detection)
  391.  2Bh    WORD    number of cylinders
  392.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  393.  40h  3 BYTEs    ???
  394.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  395.          (apparently only MSDOS 3.30 fixed media, nulls for removable
  396.         media and PCDOS 3.30)
  397.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  398. ---removable media---
  399.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  400. ---fixed media---
  401.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  402.  4Fh    WORD    absolute cylinder number of partition's start on physical
  403.          drive (always FFFFh if primary partition)
  404.  
  405. Format of COMPAQ DOS 3.31 drive data table:
  406. Offset    Size    Description
  407.  00h    DWORD    pointer to next table
  408.  04h    BYTE    physical unit number (for INT 13)
  409.  05h    BYTE    logical drive number
  410.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.01 drive data table below)
  411.  1Fh  6 BYTEs    ??? apparently always zeros
  412.  25h    BYTE    flags
  413.          bit 6: 16-bit FAT instead of 12-bit FAT
  414.             5: large volume???
  415.  26h    WORD    device-open count???
  416.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  417.          fixed media)
  418.  33h    BYTE    terminating null for volume label
  419.  34h    BYTE    device type (see INT 21/AX=440Dh)
  420.  35h    WORD    bit flags describing drive
  421.  37h    WORD    number of cylinders
  422.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  423.  52h  6 BYTEs    ??? apparently always zeros
  424.  58h    BYTE    least-significant byte of last-accessed cylinder number
  425. ---removable media---
  426.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  427. ---fixed media---
  428.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  429.  5Bh    WORD    absolute cylinder number of partition's start on physical
  430.          drive (always FFFFh if primary partition)
  431.  
  432. Format of DOS 4.0-5.0 drive data table:
  433. Offset    Size    Description
  434.  00h    DWORD    pointer to next table
  435.  04h    BYTE    physical unit number (for INT 13)
  436.  05h    BYTE    logical drive number
  437.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  438.         Offset    Size    Description
  439.          00h    WORD    bytes per sector
  440.          02h    BYTE    sectors per cluster, FFh if unknown
  441.          03h    WORD    number of reserved sectors
  442.          05h    BYTE    number of FATs
  443.          06h    WORD    number of root dir entries
  444.          08h    WORD    total sectors (see offset 15h if zero)
  445.          0Ah    BYTE    media descriptor, 00h if unknown
  446.          0Bh    WORD    sectors per FAT
  447.          0Dh    WORD    sectors per track
  448.          0Fh    WORD    number of heads
  449.          11h    DWORD    number of hidden sectors
  450.          15h    DWORD    total sectors if WORD at 08h is zero
  451.  1Fh    BYTE    flags
  452.         bit 6: 16-bit FAT instead of 12-bit
  453.  20h  2 BYTEs    ???
  454.  22h    BYTE    device type (see INT 21/AX=440Dh)
  455.  23h    WORD    bit flags describing drive
  456.         bit 0: fixed media
  457.         bit 1: door lock supported
  458.         bit 2: ???
  459.         bit 3: all sectors in a track are the same size
  460.         bit 4: physical drive has multiple logical units
  461.         bit 5: current logical drive for physical drive
  462.         bit 6: ???
  463.         bit 7: ???
  464.         bit 8: ???
  465.  25h    WORD    number of cylinders
  466.  27h 25 BYTEs    BIOS Parameter Block for highest capacity supported
  467.  40h  7 BYTEs    ???
  468.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  469.  4Bh 11 BYTEs    volume label or "NO NAME    " if none
  470.  56h    BYTE    terminating null for volume label???
  471.  57h    DWORD    serial number
  472.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  473.  63h    BYTE    terminating null for filesystem type???
  474. ----------2F1000-----------------------------
  475. INT 2F - Multiplex - SHARE - INSTALLATION CHECK
  476.     AX = 1000h
  477. Return: AL = 00h  not installed, OK to install
  478.          01h  not installed, not OK to install
  479.          FFh  installed
  480. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  481.       (08E9: OR  AL,AL
  482.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  483.     values of AL other than described here put PCDOS 4.00 into the same
  484.       loop (the buggy instructions are the same)
  485. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  486.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  487.       inactive state (due to the undocumented /NC flag used by the autoload
  488.       code) until this call is made
  489.     DOS 5.0 chains to the previous handler if AL <> 00h on entry
  490. SeeAlso: AX=1080h,INT 21/AH=52h
  491. ----------2F1040-----------------------------
  492. INT 2F - Multiplex - DOS 4 only SHARE internal - ???
  493.     AX = 1040h
  494.     ???
  495. Return: AL = FFh???
  496. SeeAlso: AX=1000h
  497. ----------2F1080-----------------------------
  498. INT 2F - Multiplex - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  499.     AX = 1080h
  500. Return: AL = status
  501.         F0h successful
  502.         FFh checking was already on
  503. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  504.       and file sharing checks.  The undocumented commandline flag /NC can
  505.       be used to disable the sharing code.
  506. SeeAlso: AX=1000h,AX=1081h
  507. ----------2F1081-----------------------------
  508. INT 2F - Multiplex - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  509.     AX = 1081h
  510. Return: AL = status
  511.         F0h successful
  512.         FFh checking was already off
  513. Note:    (see AX=1080h)
  514. SeeAlso: AX=1000h,AX=1080h
  515. ----------2F1100-----------------------------
  516. INT 2F - Multiplex - NETWORK REDIRECTOR - INSTALLATION CHECK
  517.     AX = 1100h
  518. Return: AL = 00h  not installed, OK to install
  519.          01h  not installed, not OK to install
  520.          FFh  installed
  521. Notes:    called by DOS 3.1+ kernel
  522.     In DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  523.       PC LAN Program redirector; DOS 5.0 moves the calls back into the
  524.       redirector
  525. ----------2F1100-----------------------------
  526. INT 2F - Multiplex - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  527.     AX = 1100h
  528.     STACK: WORD DADAh
  529. Return: AL = 00h not installed, OK to install
  530.         STACK unchanged
  531.        = 01h not installed, not OK to install
  532.         STACK unchanged
  533.        = FFh installed
  534.         STACK: WORD ADADh
  535. ----------2F1101-----------------------------
  536. INT 2F - Multiplex - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  537.     AX = 1101h
  538.     SS = DOS CS
  539.     SDA first filename pointer -> fully-qualified directory name
  540.     SDA CDS pointer -> current directory structure for drive with dir
  541. Return: CF set on error
  542.         AX = DOS error code (see INT 21/AH=59h)
  543.     CF clear if successful
  544. Note:    called by DOS 3.1+ kernel
  545. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  546. ----------2F1102-----------------------------
  547. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - REMOVE REMOTE DIRECTORY
  548.     AX = 1102h
  549.     SS = DOS CS
  550.     SDA first filename pointer -> fully-qualified directory name
  551.     SDA CDS pointer -> current directory structure for drive with dir
  552. Return: CF set on error
  553.         AX = DOS error code (see INT 21/AH=59h)
  554.     CF clear if successful
  555. Note:    appears to be identical to AX=1101h
  556. SeeAlso: AX=1101h
  557. ----------2F1103-----------------------------
  558. INT 2F - Multiplex - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  559.     AX = 1103h
  560.     SS = DOS CS
  561.     SDA first filename pointer -> fully-qualified directory name
  562.     SDA CDS pointer -> current directory structure for drive with dir
  563. Return: CF set on error
  564.         AX = DOS error code (see INT 21/AH=59h)
  565.     CF clear if successful
  566. Note:    called by DOS 3.1+ kernel
  567. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  568. ----------2F1104-----------------------------
  569. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - MAKE REMOTE DIRECTORY
  570.     AX = 1104h
  571.     SS = DOS CS
  572.     SDA first filename pointer -> fully-qualified directory name
  573.     SDA CDS pointer -> current directory structure for drive with dir
  574. Return: CF set on error
  575.         AX = DOS error code (see INT 21/AH=59h)
  576.     CF clear if successful
  577. Note:    appears to be identical to AX=1103h
  578. SeeAlso: AX=1103h
  579. ----------2F1105-----------------------------
  580. INT 2F - Multiplex - NETWORK REDIRECTOR - CHDIR
  581.     AX = 1105h
  582.     SS = DOS CS
  583.     SDA first filename pointer -> fully-qualified directory name
  584.     SDA CDS pointer -> current directory structure for drive with dir
  585. Return: CF set on error
  586.         AX = DOS error code (see INT 21/AH=59h)
  587.     CF clear if successful
  588.         CDS updated with new path
  589. Notes:    called by DOS 3.1+ kernel
  590.     directory string in CDS should not have a terminating backslash unless
  591.       the current directory is the root
  592. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  593. ----------2F1106-----------------------------
  594. INT 2F - Multiplex - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  595.     AX = 1106h
  596.     ES:DI -> SFT
  597.         SFT DPB field -> DPB of drive containing file
  598. Return: CF set on error
  599.         AX = DOS error code (see INT 21/AH=59h)
  600.     CF clear if successful
  601.         SFT updated (except handle count, which DOS manages itself)
  602. Note:    called by DOS 3.1+ kernel
  603. SeeAlso: AX=1201h,AX=1227h,INT 21/AH=3Eh
  604. ----------2F1107-----------------------------
  605. INT 2F - Multiplex - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  606.     AX = 1107h
  607.     ES:DI -> SFT
  608.         SFT DPB field -> DPB of drive containing file
  609. Return: CF set on error
  610.         AX = DOS error code (see INT 21/AH=59h)
  611.     CF clear if successful
  612.         all buffers for file flushed
  613.         directory entry updated
  614. Note:    called by DOS 3.1+ kernel
  615. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  616. ----------2F1108-----------------------------
  617. INT 2F - Multiplex - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  618.     AX = 1108h
  619.     ES:DI -> SFT
  620.         SFT DPB field -> DPB of drive containing file
  621.     CX = number of bytes
  622.     SS = DOS CS
  623.     SDA DTA field -> user buffer
  624. Return: CF set on error
  625.         AX = DOS error code (see INT 21/AH=59h)
  626.     CF clear if successful
  627.         CX = number of bytes read (0000h = end of file)
  628.         SFT updated
  629. Note:    called by DOS 3.1+ kernel
  630. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  631. ----------2F1109-----------------------------
  632. INT 2F - Multiplex - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  633.     AX = 1109h
  634.     ES:DI -> SFT
  635.         SFT DPB field -> DPB of drive containing file
  636.     CX = number of bytes
  637.     SS = DOS CS
  638.     SDA DTA field -> user buffer
  639. Return: CF set on error
  640.         AX = DOS error code (see INT 21/AH=59h)
  641.     CF clear if successful
  642.         CX = number of bytes written
  643.         SFT updated
  644. Note:    called by DOS 3.1+ kernel
  645. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  646. ----------2F110A-----------------------------
  647. INT 2F - Multiplex - NETWORK REDIRECTOR - LOCK REGION OF FILE
  648.     AX = 110Ah
  649.     BX = file handle
  650.     CX:DX = starting offset
  651.     SI = high word of size
  652.     STACK: WORD low word of size
  653.     ES:DI -> SFT
  654.         SFT DPB field -> DPB of drive containing file
  655.     SS = DOS CS
  656. Return: CF set on error
  657.        AL = DOS error code (see INT 21/AH=59h)
  658.     STACK unchanged
  659. Notes:    called by DOS 3.1+ kernel
  660.     the redirector is expected to resolve lock conflicts
  661. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  662. ----------2F110B-----------------------------
  663. INT 2F - Multiplex - NETWORK REDIRECTOR - UNLOCK REGION OF FILE
  664.     AX = 110Bh
  665.     BX = file handle
  666.     CX:DX = starting offset
  667.     SI = high word of size
  668.     STACK: WORD low word of size
  669.     ES:DI -> SFT for file
  670.         SFT DPB field -> DPB of drive containing file
  671. Return: CF set on error
  672.        AL = DOS error code (see INT 21/AH=59h)
  673.     STACK unchanged
  674. Note:    called by DOS 3.1+ kernel
  675. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  676. ----------2F110C-----------------------------
  677. INT 2F - Multiplex - NETWORK REDIRECTOR - GET DISK SPACE
  678.     AX = 110Ch
  679.     ES:DI -> current directory structure for desired drive
  680. Return: AL = sectors per cluster
  681.     AH = media ID byte
  682.     BX = total clusters
  683.     CX = bytes per sector
  684.     DX = number of available clusters
  685. Note:    called by DOS 3.1+ kernel
  686. SeeAlso: INT 21/AH=36h
  687. ----------2F110D-----------------------------
  688. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  689.     AX = 110Dh
  690.     SDA first filename pointer -> name of file
  691.     ???
  692. Return: ???
  693. Note:    appears to be similar to AX=110Fh
  694. SeeAlso: AX=110Fh
  695. ----------2F110E-----------------------------
  696. INT 2F - Multiplex - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  697.     AX = 110Eh
  698.     SS = DOS CS
  699.     SDA first filename pointer -> fully-qualified name of file
  700.     SDA CDS pointer -> current directory structure for drive with file
  701.     STACK: WORD new file attributes
  702. Return: CF set on error
  703.         AX = DOS error code (see INT 21/AH=59h)
  704.     CF clear if successful
  705.     STACK unchanged
  706. Note:    called by DOS 3.1+ kernel
  707. SeeAlso: AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  708. ----------2F110F-----------------------------
  709. INT 2F - Multiplex - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  710.     AX = 110Fh
  711.     SS = DOS CS
  712.     SDA first filename pointer -> fully-qualified name of file
  713.     SDA CDS pointer -> current directory structure for drive with file
  714. Return: CF set on error
  715.         AX = DOS error code (see INT 21/AH=59h)
  716.     CF clear if successful
  717.         AX = file attributes
  718.         BX:DI = file size
  719. Note:    called by DOS 3.1+ kernel
  720. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  721. ----------2F1110-----------------------------
  722. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  723.     AX = 1110h
  724.     SDA first filename pointer -> name of file
  725.     ???
  726. Return: ???
  727. Note:    appears to be similar to AX=110Eh
  728. SeeAlso: AX=110Eh
  729. ----------2F1111-----------------------------
  730. INT 2F - Multiplex - NETWORK REDIRECTOR - RENAME REMOTE FILE
  731.     AX = 1111h
  732.     SS = DS = DOS CS
  733.     SDA first filename pointer = offset of fully-qualified old name
  734.     SDA second filename pointer = offset of fully-qualified new name
  735.     SDA CDS pointer -> current directory structure for drive with file
  736. Return: CF set on error
  737.         AX = DOS error code (see INT 21/AH=59h)
  738.     CF clear if successful
  739. Note:    called by DOS 3.1+ kernel
  740. SeeAlso: INT 21/AH=56h,INT 21/AH=60h
  741. ----------2F1112-----------------------------
  742. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  743.     AX = 1112h
  744.     SS = DS = DOS CS
  745.     SDA first filename pointer -> name of file
  746.     ???
  747. Return: ???
  748. SeeAlso: AX=1111h
  749. ----------2F1113-----------------------------
  750. INT 2F - Multiplex - NETWORK REDIRECTOR - DELETE REMOTE FILE
  751.     AX = 1113h
  752.     SS = DS = DOS CS
  753.     SDA first filename pointer -> fully-qualified filename in DOS CS
  754.     SDA CDS pointer -> current directory structure for drive with file
  755. Return: CF set on error
  756.         AX = DOS error code (see INT 21/AH=59h)
  757.     CF clear if successful
  758. Notes:    called by DOS 3.1+ kernel
  759.     the filespec may contain wildcards
  760. SeeAlso: INT 21/AH=41h,INT 21/AH=60h
  761. ----------2F1114-----------------------------
  762. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  763.     AX = 1114h
  764.     SDA first filename pointer -> name of file
  765.     ???
  766. Return: ???
  767. SeeAlso: AX=1113h
  768. ----------2F1115-----------------------------
  769. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  770.     AX = 1115h
  771.     SS = DOS CS
  772.     ES:DI -> SFT ???
  773.     ???
  774. Return: ???
  775. SeeAlso: AX=112Eh
  776. ----------2F1116-----------------------------
  777. INT 2F - Multiplex - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  778.     AX = 1116h
  779.     ES:DI -> uninitialized SFT
  780.     SS = DOS CS
  781.     SDA first filename pointer -> fully-qualified name of file to open
  782.     STACK: WORD file open mode (see INT 21/AH=3Dh)
  783. Return: CF set on error
  784.         AX = DOS error code (see INT 21/AH=59h)
  785.     CF clear if successful
  786.         SFT filled (except handle count, which DOS manages itself)
  787.     STACK unchanged
  788. Note:    called by DOS 3.1+ kernel
  789. SeeAlso: AX=1106h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh,INT 21/AH=60h
  790. ----------2F1117-----------------------------
  791. INT 2F - Multiplex - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  792.     AX = 1117h
  793.     ES:DI -> uninitialized SFT
  794.     SS = DOS CS
  795.     SDA first filename pointer -> fully-qualified name of file to open
  796.     SDA CDS pointer -> current directory structure for drive with file
  797.     STACK: WORD file creation mode
  798.             low byte = file attributes
  799.             high byte = 00h normal create, 01h create new file
  800. Return: CF set on error
  801.         AX = DOS error code (see INT 21/AH=59h)
  802.     CF clear if successful
  803.         SFT filled (except handle count, which DOS manages itself)
  804.     STACK unchanged
  805. Note:    called by DOS 3.1+ kernel
  806. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  807. ----------2F1118-----------------------------
  808. INT 2F - Multiplex - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  809.     AX = 1118h
  810.     ES:DI -> uninitialized SFT
  811.     SS = DOS CS
  812.     SDA first filename pointer -> fully-qualified name of file
  813.     STACK: WORD file creation mode
  814.             low byte = file attributes
  815.             high byte = 00h normal create, 01h create new file
  816. Return: ???
  817.     STACK unchanged
  818. Note:    called by DOS 3.1+ kernel when creating a file on a drive for which the
  819.       SDA CDS pointer has offset FFFFh
  820. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  821. ----------2F1119-----------------------------
  822. INT 2F - Multiplex - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS???
  823.     AX = 1119h
  824.     ???
  825. Return: ???
  826. Notes:    called by DOS 3.1+ kernel
  827.     DOS 4.x IFSFUNC returns CF set, AX=0003h    
  828. ----------2F111A-----------------------------
  829. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  830.     AX = 111Ah
  831.     ???
  832. Return: CF set
  833.         AX = error code (03h for DOS 4.01 IFSFUNC)
  834. ----------2F111B-----------------------------
  835. INT 2F - Multiplex - NETWORK REDIRECTOR - FINDFIRST
  836.     AX = 111Bh
  837.     SS = DS = DOS CS
  838.     [DTA] = uninitialized 21-byte findfirst search data (see INT 21/AH=4Eh)
  839.     SDA first filename pointer -> fully-qualified search template
  840.     SDA CDS pointer -> current directory structure for drive with file
  841.     SDA search attribute = attribute mask for search
  842. Return: CF set on error
  843.         AX = DOS error code (see INT 21/AH=59h)
  844.     CF clear if successful
  845.         [DTA] = updated findfirst search data
  846.             (bit 7 of first byte must be set)
  847.         [DTA+15h] = standard directory entry for file
  848. Note:    called by DOS 3.1+ kernel
  849. SeeAlso: AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  850. ----------2F111C-----------------------------
  851. INT 2F - Multiplex - NETWORK REDIRECTOR - FINDNEXT
  852.     AX = 111Ch
  853.     SS = DS = DOS CS
  854.     [DTA] = 21-byte findfirst search data (see INT 21/AH=4Eh)
  855. Return: CF set on error
  856.         AX = DOS error code (see INT 21/AH=59h)
  857.     CF clear if successful
  858.         [DTA] = updated findfirst search data
  859.             (bit 7 of first byte must be set)
  860.         [DTA+15h] = standard directory entry for file
  861. Note:    called by DOS 3.1+ kernel
  862. SeeAlso: AX=111Bh,INT 21/AH=4Fh
  863. ----------2F111D-----------------------------
  864. INT 2F - Multiplex - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS
  865.     AX = 111Dh
  866.     DS???
  867.     SS = DOS CS
  868. Return: ???
  869. Notes:    called by DOS 3.1+ kernel
  870.     closes all FCBs opened by process
  871. ----------2F111E-----------------------------
  872. INT 2F - Multiplex - NETWORK REDIRECTOR - DO REDIRECTION
  873.     AX = 111Eh
  874.     SS = DOS CS
  875.     STACK: WORD function to execute
  876.         5F00h  get redirection mode
  877.             BL = type (03h printer, 04h disk)
  878.             Return: BH = state (00h off, 01h on)
  879.         5F01h  set redirection mode
  880.             BL = type (03h printer, 04h disk)
  881.             BH = state (00h off, 01h on)
  882.         5F02h  get redirection list entry
  883.             BX = redirection list index
  884.             DS:SI -> 16-byte local device name buffer
  885.             ES:DI -> 128-byte network name buffer
  886.         5F03h  redirect device
  887.             BL = device type (see INT 21/AX=5F03h)
  888.             CX = stored parameter value
  889.             DS:SI -> ASCIZ source device name
  890.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  891.         5F04h  cancel redirection
  892.             DS:SI -> ASCIZ device name or network path
  893.         5F05h  get redirection list extended entry
  894.             BX = redirection list index
  895.             DS:SI -> buffer for ASCIZ source device name
  896.             ES:DI -> buffer for destination ASCIZ network path
  897.             Return: BH = status flag
  898.                 BL = type (03h printer, 04h disk)
  899.                 CX = stored parameter value
  900.                 BP = NETBIOS local session number
  901.         5F06h  similar to 5F05h???
  902. Return: CF set on error
  903.         AX = error code (see INT 21/AH=59h)
  904.     STACK unchanged
  905. Note:    called by DOS 3.1+ kernel
  906. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  907. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  908. ----------2F111F-----------------------------
  909. INT 2F - Multiplex - NETWORK REDIRECTOR - PRINTER SETUP
  910.     AX = 111Fh
  911.     STACK: WORD function
  912.         5E02h  set printer setup
  913.         5E03h  get printer setup
  914.         5E04h  set printer mode
  915.         5E05h  get printer mode
  916. Return: CF set on error
  917.         AX = error code (see INT 21/AH=59h)
  918.     STACK unchanged
  919. Note:    called by DOS 3.1+ kernel
  920. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  921. ----------2F1120-----------------------------
  922. INT 2F - Multiplex - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  923.     AX = 1120h
  924.     DS = DOS CS
  925.     ???
  926. Return: CF clear (successful)
  927. Notes:    called by DOS 3.1+ kernel
  928.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  929. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  930. ----------2F1121-----------------------------
  931. INT 2F - Multiplex - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  932.     AX = 1121h
  933.     CX:DX = offset (in bytes) from end
  934.     ES:DI -> SFT
  935.         SFT DPB field -> DPB of drive with file
  936.     SS = DOS CS
  937. Return: CF set on error
  938.         AL = DOS error code (see INT 21/AH=59h)
  939.     CF clear if successful
  940.         DX:AX = new file position
  941. Note:    called by DOS 3.1+ kernel
  942. SeeAlso: AX=1228h,INT 21/AH=42h
  943. ----------2F1122-----------------------------
  944. INT 2F - Multiplex - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  945.     AX = 1122h
  946.     SS = DOS CS
  947.     ???
  948. Return: ???
  949. Note:    called by DOS 3.1+ kernel
  950. ----------2F1123-----------------------------
  951. INT 2F - Multiplex - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  952.     AX = 1123h
  953.     DS:SI -> ASCIZ filename to canonicalize
  954.     ES:DI -> 128-byte buffer for qualified name
  955. Return: CF set if not resolved
  956. Notes:    called by DOS 3.1+ kernel
  957.     called first when DOS attempts to resolve a filename (unless inside an
  958.       AX=5D00h server call); if this fails, DOS resolves the name locally
  959. SeeAlso: AX=1221h,INT 21/AH=60h
  960. ----------2F1124-----------------------------
  961. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  962.     AX = 1124h
  963.     ES:DI -> SFT
  964.     SS = DOS CS
  965.     ???
  966. Return: CX = ???
  967. Note:    called by DOS 3.1+ kernel if AX=1126h returns CF set
  968. SeeAlso: AX=1126h
  969. ----------2F1125-----------------------------
  970. INT 2F - Multiplex - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  971.     AX = 1125h
  972.     STACK: WORD subfunction
  973.         5D07h get print stream state
  974.             Return: DL = current state
  975.         5D08h set print stream state
  976.             DL = new state
  977.         5D09h finish print job
  978. Return: CF set on error
  979.         AX = error code (see INT 21/AH=59h)
  980.     STACK unchanged
  981. Note:    called by DOS 3.1+ kernel
  982. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  983. ----------2F1126-----------------------------
  984. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  985.     AX = 1126h
  986.     ???
  987. Return: CF set on error???
  988. Notes:    called by DOS 3.1+ kernel
  989.     called when print echoing (^P, ^PrtSc) changes state
  990. SeeAlso: AX=1124h
  991. ----------2F1127-----------------------------
  992. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - UNUSED
  993.     AX = 1127h
  994. Return: CF set
  995.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  996. ----------2F1128-----------------------------
  997. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - UNUSED
  998.     AX = 1128h
  999. Return: CF set
  1000.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  1001. ----------2F1129-----------------------------
  1002. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - UNUSED
  1003.     AX = 1129h
  1004. Return: CF set
  1005.         AX = 0001h (invalid function) (see INT 21/AH=59h)
  1006. ----------2F112A-----------------------------
  1007. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  1008.     AX = 112Ah
  1009.     DS = DOS CS
  1010.     ???
  1011. Return: ???
  1012. Note:    does something to each IFS driver
  1013. ----------2F112B-----------------------------
  1014. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - GENERIC IOCTL???
  1015.     AX = 112Bh
  1016.     SS = DOS CS
  1017.     CX = function/category
  1018.     DS:DX -> parameter block
  1019.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  1020.     ???
  1021. Return: CF set on error
  1022.         AX = DOS error code (see INT 21/AH=59h)
  1023.     CF clear if successful
  1024. Note:    called by DOS 4.0 kernel
  1025. ----------2F112C-----------------------------
  1026. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  1027.     AX = 112Ch
  1028.     SS = DOS CS
  1029.     SDA current SFT pointer -> SFT for file
  1030.     ???
  1031. Return: CF set on error
  1032. ----------2F112D-----------------------------
  1033. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  1034.     AX = 112Dh
  1035.     BL = subfunction (value of AL on INT 21)
  1036.         04h ???
  1037.         Return: CF clear
  1038.         else ???
  1039.         Return: CX = ??? (00h or 02h for DOS 4.01)
  1040.     ES:DI -> SFT
  1041.     SS = DOS CS
  1042. Return: DS = DOS CS
  1043. Note:    called by DOS 4.0 kernel on INT 21/AX=5702h,INT 21/AX=5703h,
  1044.       INT 21/AX=5704h
  1045. ----------2F112E-----------------------------
  1046. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - EXTENDED OPEN/CREATE FILE
  1047.     AX = 112Eh
  1048.     SS = DS = DOS CS
  1049.     ES:DI -> uninitialized SFT for file
  1050.     STACK: WORD file attribute for created/truncated file
  1051.             low byte = file attributes
  1052.             high byte = 00h normal create/open, 01h create new file
  1053.     SDA first filename pointer -> fully-qualified filename
  1054.     SDA extended file open action -> action code (see INT 21/AX=6C00h)
  1055.     SDA extended file open mode -> open mode for file (see INT 21/AX=6C00h)
  1056. Return: CF set on error
  1057.         AX = error code
  1058.     CF clear if successful
  1059.         CX = result code
  1060.         01h file opened
  1061.         02h file created
  1062.         03h file replaced (truncated)
  1063.         SFT initialized (except handle count, which DOS manages itself)
  1064. Note:    called by DOS 4.0 kernel
  1065. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  1066. ----------2F112F-----------------------------
  1067. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - ???
  1068.     AX = 112Fh
  1069.     SS = DOS CS
  1070.     STACK: WORD function in low byte
  1071.         00h ???
  1072.             DS:SI -> Current Directory Structure???
  1073.             CL = drive (1=A:)
  1074.         01h ???
  1075.             DS:SI -> ???
  1076.             CL = file handle???
  1077.         02h ???
  1078.             DS:SI -> Current Directory Structure???
  1079.             DI = ???
  1080.             CX = drive (1=A:)
  1081.     ???
  1082. Return: CF set on error
  1083.         AX = DOS error code (see INT 21/AH=59h)
  1084.     CF clear if successful
  1085. Note:    called by DOS 4.0 kernel
  1086. SeeAlso: INT 21/AH=6Bh
  1087. ----------2F1130-----------------------------
  1088. INT 2F - Multiplex - DOS 4.x only IFSFUNC.EXE - GET IFSFUNC SEGMENT
  1089.     AX = 1130h
  1090. Return: ES = CS of resident IFSFUNC
  1091. ----------2F1186-----------------------------
  1092. INT 2F - LAN Manager Enhanced DOS API - DosReadAsynchNmPipe
  1093.         AX = 1186h
  1094.         ???
  1095. Return: ???
  1096. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  1097.       file/printer services
  1098. SeeAlso: AX=118Fh,INT 21/AX=5F39h
  1099. ----------2F118A-----------------------------
  1100. INT 2F - LAN Manager 2.0 DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  1101.     AX = 118Ah
  1102.     ???
  1103. Return: ???
  1104. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  1105. ----------2F118F-----------------------------
  1106. INT 2F - LAN Manager Enhanced DOS API - DosWriteAsynchNmPipe
  1107.         AX = 118Fh
  1108.         ???
  1109. Return: ???
  1110. SeeAlso: AX=1186h,INT 21/AX=5F3Ah
  1111. ----------2F1200-----------------------------
  1112. INT 2F - Multiplex - DOS 3+ internal - INSTALLATION CHECK
  1113.     AX = 1200h
  1114. Return: AL = FFh (for compatibility with other INT 2F functions)
  1115. ----------2F1201-----------------------------
  1116. INT 2F - Multiplex - DOS 3+ internal - CLOSE CURRENT FILE
  1117.     AX = 1201h
  1118.     SS = DOS CS
  1119.     SDA current SFT pointer -> SFT of file to close
  1120. Return: CF set on error
  1121.     BX???
  1122.     CX new reference count of SFT
  1123.     ES:DI -> SFT for file
  1124. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  1125. ----------2F1202-----------------------------
  1126. INT 2F - Multiplex - DOS 3+ internal - GET INTERRUPT ADDRESS
  1127.     AX = 1202h
  1128.     STACK: WORD vector number
  1129. Return: ES:BX -> interrupt vector
  1130.     STACK unchanged
  1131. ----------2F1203-----------------------------
  1132. INT 2F - Multiplex - DOS 3+ internal - GET DOS DATA SEGMENT
  1133.     AX = 1203h
  1134. Return: DS = segment of IBMDOS.COM/MSDOS.SYS
  1135. ----------2F1204-----------------------------
  1136. INT 2F - Multiplex - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  1137.     AX = 1204h
  1138.     STACK: WORD character to normalize
  1139. Return: AL = normalized character (forward slash turned to backslash, all
  1140.         others unchanged)
  1141.     ZF set if path separator
  1142.     STACK unchanged
  1143. ----------2F1205-----------------------------
  1144. INT 2F - Multiplex - DOS 3+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  1145.     AX = 1205h
  1146.     STACK: WORD character to output
  1147. Return: STACK unchanged
  1148. Note:    can be called only from within DOS
  1149. ----------2F1206-----------------------------
  1150. INT 2F - Multiplex - DOS 3+ internal - INVOKE CRITICAL ERROR
  1151.     AX = 1206h
  1152.     DI = error code
  1153.     BP:SI -> device driver header
  1154.     SS = DOS CS
  1155.     STACK: WORD value to be passed to INT 24 in AX
  1156. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  1157.     STACK unchanged
  1158. SeeAlso: INT 24
  1159. ----------2F1207-----------------------------
  1160. INT 2F - Multiplex - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  1161.     AX = 1207h
  1162.     DS:DI -> disk buffer
  1163. Return: buffer moved to end of buffer list (least-recently used is first)
  1164. Note:    can be called only from within DOS
  1165. SeeAlso: AX=120Fh
  1166. ----------2F1208-----------------------------
  1167. INT 2F - Multiplex - DOS 3+ internal - DECREMENT SFT REFERENCE COUNT
  1168.     AX = 1208h
  1169.     ES:DI -> SFT
  1170. Return: AX = original value of reference count
  1171. Note:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  1172.       that the SFT is not in use).    It is the caller's responsibility to
  1173.       set the reference count to zero after cleaning up.
  1174. ----------2F1209-----------------------------
  1175. INT 2F - Multiplex - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  1176.     AX = 1209h
  1177.     DS:DI -> disk buffer
  1178. Return: disk buffer marked unused, contents written to disk if buffer dirty
  1179. Note:    can be called only from within DOS
  1180. SeeAlso: AX=120Eh,AX=1215h
  1181. ----------2F120A-----------------------------
  1182. INT 2F - Multiplex - DOS 3+ internal - PERFORM CRITICAL ERROR INTERRUPT
  1183.     AX = 120Ah
  1184.     DS = SS = DOS CS
  1185.     STACK: WORD extended error code
  1186. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  1187.     CF clear if retry, set otherwise
  1188.     STACK unchanged
  1189. Notes:    can only be called during a DOS function call, as it uses various
  1190.       fields in the SDA to set up the registers for the INT 24
  1191.     reportedly sets current DPB's first root directory sector to 1
  1192. SeeAlso: INT 24
  1193. ----------2F120B-----------------------------
  1194. INT 2F - Multiplex - DOS 3+ internal - SIGNAL SHARING VIOLATION TO USER
  1195.     AX = 120Bh
  1196.     ES:DI -> system file table entry for previous open of file
  1197.     STACK: WORD extended error code (should be 20h--sharing violation)
  1198. Return: CF clear if operation should be retried
  1199.     CF set if operation should not be retried
  1200.         AX = error code (20h) (see AH=59h)
  1201.     STACK unchanged
  1202. Notes:    can only be called during a DOS function call
  1203.     should only be called if an attempt was made to open an already-open
  1204.       file contrary to the sharing rules
  1205.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  1206.       inheritance allowed
  1207. ----------2F120C-----------------------------
  1208. INT 2F - Multiplex - DOS 3+ internal - OPEN DEVICE AND SET SFT OWNER???
  1209.     AX = 120Ch
  1210.     SDA current SFT pointer -> SFT for file
  1211.     DS = SS = DOS CS
  1212. Return: ES, DI, AX destroyed
  1213. Notes:    invoked "device open" call on device driver for SFT
  1214.     changes owner of last-accessed SFT to calling process if it was opened
  1215.       via FCB
  1216.     called by network redirectors
  1217. ----------2F120D-----------------------------
  1218. INT 2F - Multiplex - DOS 3+ internal - GET DATE AND TIME
  1219.     AX = 120Dh
  1220.     SS = DOS CS
  1221. Return: AX = current date in packed format (see INT 21/AX=5700h)
  1222.     DX = current time in packed format (see INT 21/AX=5700h)
  1223. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  1224. ----------2F120E-----------------------------
  1225. INT 2F - Multiplex - DOS 3+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  1226.     AX = 120Eh
  1227.     SS = DOS CS
  1228. Return: DS:DI -> first disk buffer
  1229. Note:    clears "referenced" flag on all disk buffers
  1230. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  1231. ----------2F120F-----------------------------
  1232. INT 2F - Multiplex - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  1233.     AX = 120Fh
  1234.     DS:DI -> disk buffer
  1235.     SS = DOS CS
  1236. Return: DS:DI -> next buffer in buffer list
  1237. Note:    indicated buffer moved to end of chain
  1238. SeeAlso: AX=1207h
  1239. ----------2F1210-----------------------------
  1240. INT 2F - Multiplex - DOS 3+ internal - FIND UNREFERENCED DISK BUFFER
  1241.     AX = 1210h
  1242.     DS:DI -> first disk buffer to check
  1243. Return: ZF clear if found
  1244.         DS:DI -> first unreferenced disk buffer
  1245.     ZF set if not found
  1246. SeeAlso: AX=120Eh
  1247. ----------2F1211-----------------------------
  1248. INT 2F - Multiplex - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  1249.     AX = 1211h
  1250.     DS:SI -> ASCIZ filename to normalize
  1251.     ES:DI -> buffer for normalized filename
  1252. Return: destination buffer filled with uppercase filename, with slashes turned
  1253.     to backslashes
  1254. SeeAlso: AX=121Eh,AX=1221h
  1255. ----------2F1212-----------------------------
  1256. INT 2F - Multiplex - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  1257.     AX = 1212h
  1258.     ES:DI -> ASCIZ string
  1259. Return: CX = length of string
  1260. SeeAlso: AX=1225h
  1261. ----------2F1213-----------------------------
  1262. INT 2F - Multiplex - DOS 3+ internal - UPPERCASE CHARACTER
  1263.     AX = 1213h
  1264.     STACK: WORD character to convert to uppercase
  1265. Return: AL = uppercase character
  1266.     STACK unchanged
  1267. ----------2F1214-----------------------------
  1268. INT 2F - Multiplex - DOS 3+ internal - COMPARE FAR POINTERS
  1269.     AX = 1214h
  1270.     DS:SI = first pointer
  1271.     ES:DI = second pointer
  1272. Return: ZF set if pointers are equal, ZF clear if not equal
  1273. ----------2F1215-----------------------------
  1274. INT 2F - Multiplex - DOS 3+ internal - FLUSH BUFFER
  1275.     AX = 1215h
  1276.     DS:DI -> disk buffer
  1277.     SS = DOS CS
  1278.     STACK: WORD drives for which to skip buffer
  1279.         ignore buffer if drive same as high byte, or bytes differ and
  1280.         the buffer is for a drive OTHER than that given in low byte
  1281. Return: STACK unchanged
  1282. Note:    can be called only from within DOS
  1283. SeeAlso: AX=1209h
  1284. ----------2F1216-----------------------------
  1285. INT 2F - Multiplex - DOS 3+ internal - GET ADDRESS OF SYSTEM FILE TABLE
  1286.     AX = 1216h
  1287.     BX = system file table entry number
  1288. Return: CF clear if successful
  1289.         ES:DI -> system file table entry
  1290.     CF set if BX greater than FILES=
  1291. SeeAlso: AX=1220h
  1292. ----------2F1217-----------------------------
  1293. INT 2F - Multiplex - DOS 3+ internal - GET CURRENT DIRECTRY STRUCTURE FOR DRIVE
  1294.     AX = 1217h
  1295.     SS = DOS CS
  1296.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  1297. Return: CF set on error
  1298.         (drive > LASTDRIVE)
  1299.     CF clear if successful
  1300.         DS:SI -> current directory structure for specified drive
  1301.     STACK unchanged
  1302. SeeAlso: AX=1219h
  1303. ----------2F1218-----------------------------
  1304. INT 2F - Multiplex - DOS 3+ internal - GET CALLER'S REGISTERS
  1305.     AX = 1218h
  1306. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  1307. Note:    only valid while within DOS
  1308. ----------2F1219-----------------------------
  1309. INT 2F - Multiplex - DOS 3+ internal - SET DRIVE???
  1310.     AX = 1219h
  1311.     SS = DOS CS
  1312.     STACK: WORD drive (0 = default, 1 = A:, etc)
  1313. Return: ???
  1314.     STACK unchanged
  1315. Notes:    calls AX=1217h
  1316.     builds a current directory structure if inside server call
  1317.       (INT 21/AX=5D00h)
  1318. SeeAlso: AX=1217h,AX=121Fh
  1319. ----------2F121A-----------------------------
  1320. INT 2F - Multiplex - DOS 3+ internal - GET FILE'S DRIVE
  1321.     AX = 121Ah
  1322.     DS:SI -> filename
  1323. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  1324.     DS:SI -> filename without leading X: (if present)
  1325. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  1326. ----------2F121B-----------------------------
  1327. INT 2F - Multiplex - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  1328.     AX = 121Bh
  1329.     CL = year - 1980
  1330. Return: AL = number of days in February
  1331. Note:    requires DS to be set to the DOS code segment
  1332. SeeAlso: INT 21/AH=2Bh
  1333. ----------2F121C-----------------------------
  1334. INT 2F - Multiplex - DOS 3+ internal - CHECKSUM MEMORY
  1335.     AX = 121Ch
  1336.     DS:SI -> start of memory to checksum
  1337.     CX = number of bytes
  1338.     DX = initial checksum
  1339.     SS = DOS CS
  1340. Return: AX, CX destroyed
  1341.     DX = checksum
  1342.     DS:SI -> first byte after checksummed range
  1343. Note:    used by DOS to determine day count since 1/1/80 given a date
  1344. SeeAlso: AX=121Dh
  1345. ----------2F121D-----------------------------
  1346. INT 2F - Multiplex - DOS 3+ internal - SUM MEMORY
  1347.     AX = 121Dh
  1348.     DS:SI -> memory to add up
  1349.     CX = 0000h
  1350.     DX = limit
  1351. Return: AL = byte which exceeded limit
  1352.     CX = number of bytes before limit exceeded
  1353.     DX = remainder after adding first CX bytes
  1354.     DS:SI -> byte beyond the one which exceeded the limit
  1355. Note:    used by DOS to determine year or month given day count since 1/1/80
  1356. SeeAlso: AX=121Ch
  1357. ----------2F121E-----------------------------
  1358. INT 2F - Multiplex - DOS 3+ internal - COMPARE FILENAMES
  1359.     AX = 121Eh
  1360.     DS:SI -> first ASCIZ filename
  1361.     ES:DI -> second ASCIZ filename
  1362. Return: ZF set if filenames equivalent, ZF clear if not
  1363. SeeAlso: AX=1211h,AX=1221h
  1364. ----------2F121F-----------------------------
  1365. INT 2F - Multiplex - DOS 3+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  1366.     AX = 121Fh
  1367.     SS = DOS CS
  1368.     STACK: WORD drive letter
  1369. Return: ES:DI -> current directory structure (will be overwritten by next call)
  1370.     STACK unchanged
  1371. ----------2F1220-----------------------------
  1372. INT 2F - Multiplex - DOS 3+ internal - GET JOB FILE TABLE ENTRY
  1373.     AX = 1220h
  1374.     BX = file handle
  1375. Return: CF set on error
  1376.         AL = 6 (invalid file handle)
  1377.     CF clear if successful
  1378.         ES:DI -> JFT entry for file handle in current process
  1379. Note:    the byte pointed at by ES:DI contains the number of the SFT for the
  1380.       file handle, or FFh if the handle is not open
  1381. SeeAlso: AX=1216h,AX=1229h
  1382. ----------2F1221-----------------------------
  1383. INT 2F - Multiplex - DOS 3+ internal - CANONICALIZE FILE NAME
  1384.     AX = 1221h
  1385.     DS:SI -> file name to be fully qualified
  1386.     ES:DI -> 128-byte buffer for resulting canonical file name
  1387.     SS = DOS CS
  1388. Return: (see INT 21/AH=60h)
  1389. Note:    identical to INT 21/AH=60h
  1390. SeeAlso: AX=1123h,INT 21/AH=60h
  1391. ----------2F1222-----------------------------
  1392. INT 2F - Multiplex - DOS 3+ internal - SET EXTENDED ERROR INFO
  1393.     AX = 1222h
  1394.     SS = DOS data segment
  1395.     SS:SI -> 4-byte records
  1396.         BYTE    error code, FFh = last record
  1397.         BYTE    error class, FFh = don't change
  1398.         BYTE    suggested action, FFh = don't change
  1399.         BYTE    error locus, FFh = don't change
  1400.     SDA error code set
  1401. Return: SI destroyed
  1402.     SDA error class, error locus, and suggested action fields set
  1403. Note:    can be called only from within DOS
  1404. SeeAlso: AX=122Dh,INT 21/AH=59h
  1405. ----------2F1223-----------------------------
  1406. INT 2F - Multiplex - DOS 3+ internal - CHECK IF CHARACTER DEVICE
  1407.     AX = 1223h
  1408.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  1409.     SDA+22Bh (DOS 4.0x) = eight-character blank-padded name
  1410. Return: CF set if no character device by that name found
  1411.     CF clear if found
  1412.         BH = low byte of device attribute word
  1413. Note:    can only be called from within DOS (assumes DS=SS=DOS CS)
  1414. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  1415. ----------2F1224-----------------------------
  1416. INT 2F - Multiplex - DOS 3+ internal - DELAY
  1417.     AX = 1224h
  1418.     SS = DOS CS
  1419. Return: after delay set by INT 21/AX=440Bh, unless in server call
  1420.       (INT 21/AX=5D00h)
  1421. Note:    delay is dependent on the processor speed, and is skipped entirely if
  1422.       inside a server call
  1423. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h
  1424. ----------2F1225-----------------------------
  1425. INT 2F - Multiplex - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  1426.     AX = 1225h
  1427.     DS:SI -> ASCIZ string
  1428. Return: CX = length of string
  1429. SeeAlso: AX=1212h
  1430. ----------2F1226-----------------------------
  1431. INT 2F - Multiplex - DOS 3.3+ internal - OPEN FILE
  1432.     AX = 1226h
  1433.     CL = access mode
  1434.     DS:DX -> ASCIZ filename
  1435. Return: CF set on error
  1436.         AL = error code (see INT 21/AH=59h)
  1437.     CF clear if successful
  1438.         AX = file handle
  1439. Notes:    can only be called from within DOS (assumes SS=DOS CS)
  1440.     equivalent to INT 21/AH=3Dh    
  1441. SeeAlso: AX=1227h,INT 21/AH=3Dh
  1442. ----------2F1227-----------------------------
  1443. INT 2F - Multiplex - DOS 3.3+ internal - CLOSE FILE
  1444.     AX = 1227h
  1445.     BX = file handle
  1446. Return: CF set on error
  1447.         AL = 06h invalid file handle
  1448.     CF clear if successful
  1449. Notes:    can only be called from within DOS (assumes SS=DOS CS)
  1450.     equivalent to INT 21/AH=3Eh
  1451. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  1452. ----------2F1228BP4200-----------------------
  1453. INT 2F - Multiplex - DOS 3.3+ internal - MOVE FILE POINTER
  1454.     AX = 1228h
  1455.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  1456.     BX = file handle
  1457.     CX:DX = offset in bytes
  1458.     SS = DOS CS
  1459. Return: as for INT 21/AH=42h
  1460. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  1461.       function call
  1462.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  1463.       LSEEK, and restores frame pointer
  1464. SeeAlso: INT 21/AH=42h
  1465. ----------2F1229-----------------------------
  1466. INT 2F - Multiplex - DOS 3.3+ internal - READ FROM FILE
  1467.     AX = 1229h
  1468.     BX = file handle
  1469.     CX = number of bytes to read
  1470.     DS:DX -> buffer
  1471.     SS = DOS CS
  1472. Return: as for INT 21/AH=3Fh
  1473. Note:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  1474.       a DOS function call
  1475. SeeAlso: AX=1226h,INT 21/AH=3Fh
  1476. ----------2F122A-----------------------------
  1477. INT 2F - Multiplex - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  1478.     AX = 122Ah
  1479.     BX = entry point to set (0001h or 0002h)
  1480.     DS:SI -> FASTOPEN entry point
  1481.         (entry point not set if SI = FFFFh for DOS 4+)
  1482. Return: CF set if specified entry point already set
  1483. Notes:    entry point in BX is ignored under DOS 3.30
  1484.     both entry points set to same handler by DOS 4.01
  1485.  
  1486. DOS 3.30 FASTOPEN is called with:
  1487.     AL = 01h  ???
  1488.         CX = ??? seems to be offset
  1489.         DI = ??? seems to be offset
  1490.         SI = offset in DOS CS of filename
  1491.     AL = 02h  ???
  1492.     AL = 03h  open file???
  1493.         SI = offset in DOS CS of filename
  1494.     AL = 04h  ???
  1495.         AH = subfunction (00h,01h,02h)
  1496.         ES:DI -> ???
  1497.         CX = ??? (subfunctions 01h and 02h only)
  1498. Returns: CF set on error or not installed
  1499. Note: function 03h calls function 01h first
  1500.  
  1501. PCDOS 4.01 FASTOPEN is additionally called with:
  1502.     AL = 04h ???
  1503.         AH = 03h
  1504.         ???
  1505.     AL = 05h ???
  1506.     AL = 0Bh ???
  1507.     AL = 0Ch ???
  1508.     AL = 0Dh ???
  1509.     AL = 0Eh ???
  1510.     AL = 0Fh ???
  1511.     AL = 10h ???
  1512. ----------2F122B-----------------------------
  1513. INT 2F - Multiplex - DOS 3.3+ internal - IOCTL
  1514.     AX = 122Bh
  1515.     BP = 44xxh
  1516.     SS = DOS CS
  1517.     additional registers as appropriate for INT 21/AX=44xxh
  1518. Return: as for INT 21/AH=44h
  1519. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  1520.       a DOS function call
  1521.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  1522.       IOCTL, and restores frame pointer
  1523. SeeAlso: INT 21/AH=44h
  1524. ----------2F122C-----------------------------
  1525. INT 2F - Multiplex - DOS 3.3+ internal - GET DEVICE CHAIN
  1526.     AX = 122Ch
  1527. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  1528. SeeAlso: INT 21/AH=52h
  1529. ----------2F122D-----------------------------
  1530. INT 2F - Multiplex - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  1531.     AX = 122Dh
  1532. Return: AX = current extended error code
  1533. SeeAlso: AX=1222h,INT 21/AH=59h
  1534. ----------2F122E-----------------------------
  1535. INT 2F - Multiplex - DOS 4+ internal - GET OR SET ERROR TABLE ADDRESSES
  1536.     AX = 122Eh
  1537.     DL = subfunction
  1538.         00h get standard DOS error table (errors 00h-12h,50h-5Bh)
  1539.         Return: ES:DI -> error table
  1540.         01h set standard DOS error table
  1541.         ES:DI -> error table
  1542.         02h get parameter error table (errors 00h-0Ah)
  1543.         Return: ES:DI -> error table
  1544.         03h set parameter error table
  1545.         ES:DI -> error table
  1546.         04h get critical/SHARE error table (errors 13h-2Bh)
  1547.         Return: ES:DI -> error table
  1548.         05h set critical/SHARE error table
  1549.         ES:DI -> error table
  1550.         06h get ??? error table
  1551.         Return: ES:DI -> error table or 0000h:0000h
  1552.         07h set ??? error table
  1553.         ES:DI -> error table
  1554.         08h get error message retriever (see below)
  1555.         Return: ES:DI -> FAR procedure to fetch error message 
  1556.         09h set ??? error table
  1557.         ES:DI -> error table
  1558. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  1559.       the offset of the error message table within COMMAND.COM, and the
  1560.       procedure returned by DL=08h should be called
  1561.     DOS 5.0 COMMAND.COM does not allow setting any of the addresses; they
  1562.       are always returned with segment 0001h
  1563. SeeAlso: AX=0500h,INT 21/AH=59h
  1564.  
  1565. Format of DOS 4.x error table:
  1566. Offset    Size    Description
  1567.  00h    BYTE    FFh
  1568.  01h  2 BYTEs    04h,00h (DOS version???)
  1569.  03h    BYTE    number of error headers following
  1570.  04h 2N WORDs    table of all error headers for table
  1571.         Offset    Size    Description
  1572.          00h    WORD    error message number
  1573.          02h    WORD    offset of error message from start of header
  1574.                 error messages are count byte followed by msg
  1575. Note:    DOS 5 error tables consist of one word per error number; each word
  1576.       contains either the offset of a counted string or 0000h
  1577.  
  1578. Call error retrieval function with:
  1579.     AX = error number
  1580.     DI = offset of error table
  1581. Return: ES:DI -> error message (counted string)
  1582. Note:    this function needs to access COMMAND.COM if the messages were not
  1583.       loaded into memory permanently with /MSG; the caller should assume
  1584.       that the returned message will be overwritten by the next call of
  1585.       the function
  1586. ----------2F122F-----------------------------
  1587. INT 2F - Multiplex - DOS 4+ internal - SET DOS VERSION NUMBER TO RETURN
  1588.     AX = 122Fh
  1589.     DX = DOS version number (0000h = return true DOS version)
  1590. SeeAlso: INT 21/AH=30h
  1591. ----------2F13-------------------------------
  1592. INT 2F - Multiplex - DOS 3.3+ - SET DISK INTERRUPT HANDLER
  1593.     AH = 13h
  1594.     DS:DX -> interrupt handler disk driver calls on read/write
  1595.     ES:BX = address to restore INT 13 to on system halt (exit from root
  1596.          shell) or warm boot (INT 19)
  1597. Return: DS:DX from previous invocation of this function
  1598.     ES:BX from previous invocation of this function
  1599. Notes:  IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  1600.       original INT 13 handler.  The first is for disk change detection
  1601.       on floppy drives, the second is for tracking formatting calls and
  1602.       correcting DMA boundary errors, the third is for working around
  1603.       problems in a particular version of IBM's ROM BIOS
  1604.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  1605.       also points there unless IO.SYS has installed a special filter for
  1606.       hard disk reads (on systems with model byte FCh and BIOS date
  1607.       "01/10/84" only), in which case it points at the special filter
  1608.     most DOS 3.3+ disk access is via the vector in DS:DX, although a few
  1609.       functions are still invoked via an INT 13 instruction
  1610.     this is a dangerous security loophole for any virus-monitoring software
  1611.       which does not trap this call (at least two viruses are known to use
  1612.       it to get the original ROM entry point)
  1613. SeeAlso: INT 13/AH=01h,INT 19
  1614. ----------2F1400-----------------------------
  1615. INT 2F - Multiplex - NLSFUNC.COM - INSTALLATION CHECK
  1616.     AX = 1400h
  1617. Return: AL = 00h not installed, OK to install
  1618.          01h not installed, not OK
  1619.          FFh installed
  1620. Notes:    called by DOS v3.3+ kernel
  1621.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  1622. ----------2F1401-----------------------------
  1623. INT 2F - Multiplex - NLSFUNC.COM - CHANGE CODE PAGE
  1624.     AX = 1401h
  1625.     DS:SI -> internal code page structure (see below)
  1626.     BX = new code page
  1627.     DX = country code???
  1628. Return: AL = status
  1629.          00h successful
  1630.          else DOS error code
  1631. Note:    called by DOS v3.3+ kernel
  1632. SeeAlso: INT 21/AH=66h
  1633.  
  1634. Format of DOS 3.30 internal code page structure:
  1635. Offset    Size    Description
  1636.  00h  8 BYTEs    ???
  1637.  08h 64 BYTEs    name of country information file
  1638.  48h    WORD    system code page
  1639.  4Ah    WORD    number of supported subfunctions
  1640.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  1641.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  1642.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  1643.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  1644.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  1645. ----------2F1402-----------------------------
  1646. INT 2F - Multiplex - NLSFUNC.COM - GET COUNTRY INFO
  1647.     AX = 1402h
  1648.     BP = subfunction (same as AL for INT 21/AH=65h)
  1649.     BX = code page
  1650.     DX = country code
  1651.     DS:SI -> internal code page structure (see AX=1401h)
  1652.     ES:DI -> user buffer
  1653.     CX = size of user buffer
  1654. Return: AL = status
  1655.         00h successful
  1656.         else DOS error code
  1657. Notes:    called by DOS v3.3+ kernel on INT 21/AH=65h
  1658.     code page structure apparently only needed for COUNTRY.SYS pathname
  1659. SeeAlso: AX=1403h,AX=1404h,INT 21/AH=65h
  1660. ----------2F1403-----------------------------
  1661. INT 2F - Multiplex - NLSFUNC.COM - SET COUNTRY INFO
  1662.     AX = 1403h
  1663.     DS:SI -> internal code page structure (see AX=1401h)
  1664.     BX = code page
  1665.     DX = country code
  1666. Return: AL = status 
  1667.          ???
  1668. Note:    called by DOS v3.3+ kernel on INT 21/AH=38h
  1669. SeeAlso: AX=1402h,AX=1404h,INT 21/AH=38h"SET"
  1670. ----------2F1404-----------------------------
  1671. INT 2F - Multiplex - NLSFUNC.COM - GET COUNTRY INFO
  1672.     AX = 1404h
  1673.     BX = code page
  1674.     DX = country code
  1675.     DS:SI -> internal code page structure (see AX=1401h)
  1676.     ES:DI -> user buffer
  1677. Return: AL = status
  1678.          ???
  1679. Notes:    called by DOS v3.3+ kernel on INT 21/AH=38h
  1680.     code page structure apparently only needed for COUNTRY.SYS pathname
  1681. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  1682. ----------2F1500-----------------------------
  1683. INT 2F - Multiplex - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  1684.     AX = 1500h
  1685. Return: AX = FFFFh
  1686.     ES:DI -> ??? (graphics data?)
  1687. Note:    this installation check conflicts with the CDROM Extensions
  1688.       installation check; moved to AX=AC00h in later versions
  1689. SeeAlso: AX=AC00h
  1690. ----------2F1500BX0000-----------------------
  1691. INT 2F - Multiplex - CDROM - INSTALLATION CHECK
  1692.     AX = 1500h
  1693.     BX = 0000h
  1694. Return: BX = number of CDROM drive letters used
  1695.     CX = starting drive letter (0=A:)
  1696. Notes:    this installation check DOES NOT follow the format used by other
  1697.       software
  1698.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  1699.       installation check
  1700. ----------2F1501-----------------------------
  1701. INT 2F - Multiplex - CDROM - GET DRIVE DEVICE LIST
  1702.     AX = 1501h
  1703.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  1704. Return: buffer filled, for each drive letter
  1705.       BYTE    subunit number in driver
  1706.       DWORD address of device driver header
  1707. ----------2F1502-----------------------------
  1708. INT 2F - Multiplex - CDROM - GET COPYRIGHT FILE NAME
  1709.     AX = 1502h
  1710.     ES:BX -> 38-byte buffer for name of copyright file
  1711.     CX = drive number (0=A:)
  1712. Return: CF set if drive is not a CDROM drive
  1713.         AX = 15 (invalid drive)
  1714.     CF clear if successful
  1715. SeeAlso: AX=1503h
  1716. ----------2F1503-----------------------------
  1717. INT 2F - Multiplex - CDROM - GET ABSTRACT FILE NAME
  1718.     AX = 1503h
  1719.     ES:BX -> 38-byte buffer for name of abstract file
  1720.     CX = drive number (0=A:)
  1721. Return: CF set if drive is not a CDROM drive
  1722.         AX = 15 (invalid drive)
  1723.     CF clear if successful
  1724. SeeAlso: AX=1502h
  1725. ----------2F1504-----------------------------
  1726. INT 2F - Multiplex - CDROM - GET BIBLIOGRAPHIC DOC FILE NAME
  1727.     AX = 1504h
  1728.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  1729.     CX = drive number (0=A:)
  1730. Return: CF set if drive is not a CDROM drive
  1731.         AX = 15 (invalid drive)
  1732.     CF clear if successful
  1733. ----------2F1505-----------------------------
  1734. INT 2F - Multiplex - CDROM - READ VTOC
  1735.     AX = 1505h
  1736.     ES:BX -> 2048-byte buffer
  1737.     CX = drive number (0=A:)
  1738.     DX = sector index (0=first volume descriptor,1=second,...)
  1739. Return: CF set on error
  1740.         AX = error code (15=invalid drive,21=not ready)
  1741.     CF clear if successful
  1742.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  1743. ----------2F1506-----------------------------
  1744. INT 2F - Multiplex - CDROM - TURN DEBUGGING ON
  1745.     AX = 1506h
  1746.     BX = debugging function to enable
  1747. Note:    reserved for development
  1748. SeeAlso: AX=1507h
  1749. ----------2F1507-----------------------------
  1750. INT 2F - Multiplex - CDROM - TURN DEBUGGING OFF
  1751.     AX = 1507h
  1752.     BX = debugging function to disable
  1753. Note:    reserved for development
  1754. SeeAlso: AX=1506h
  1755. ----------2F1508-----------------------------
  1756. INT 2F - Multiplex - CDROM - ABSOLUTE DISK READ
  1757.     AX = 1508h
  1758.     ES:BX -> buffer
  1759.     CX = drive number (0=A:)
  1760.     SI:DI = starting sector number
  1761.     DX = number of sectors to read
  1762. Return: CF set on error
  1763.         AL = error code (15=invalid drive,21=not ready)
  1764.     CF clear if successful
  1765. SeeAlso: AX=1509h
  1766. ----------2F1509-----------------------------
  1767. INT 2F - Multiplex - CDROM - ABSOLUTE DISK WRITE
  1768.     AX = 1509h
  1769.     ES:BX -> buffer
  1770.     CX = drive number (0=A:)
  1771.     SI:DI = starting sector number
  1772.     DX = number of sectors to write
  1773. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  1774. SeeAlso: AX=1508h
  1775. ----------2F150A-----------------------------
  1776. INT 2F - Multiplex - CDROM - RESERVED
  1777.     AX = 150Ah
  1778. ----------2F150B-----------------------------
  1779. INT 2F - Multiplex - CDROM 2.00 - DRIVE CHECK
  1780.     AX = 150Bh
  1781.     CX = drive number (0=A:)
  1782. Return: BX = ADADh if MSCDEX.EXE installed
  1783.         AX = 0000h if drive not supported
  1784.         nonzero if supported
  1785. SeeAlso: AX=150Dh
  1786. ----------2F150C-----------------------------
  1787. INT 2F - Multiplex - CDROM 2.00 - GET MSCDEX.EXE VERSION
  1788.     AX = 150Ch
  1789. Return: BH = major version
  1790.     BL = minor version
  1791. Note:    MSCDEX.EXE versions prior to 1.02 return BX=0
  1792. ----------2F150D-----------------------------
  1793. INT 2F - Multiplex - CDROM 2.00 - GET CDROM DRIVE LETTERS
  1794.     AX = 150Dh
  1795.     ES:BX -> buffer for drive letter list (1 byte per drive)
  1796. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  1797.     to the drive in the same position for function 1501h
  1798. SeeAlso: AX=150Bh
  1799. ----------2F150E-----------------------------
  1800. INT 2F - Multiplex - CDROM 2.00 - GET/SET VOLUME DESCRIPTOR PREFERENCE
  1801.     AX = 150Eh
  1802.     BX = subfunction
  1803.         00h get preference
  1804.         DX = 0000h
  1805.         Return: DX = preference settings
  1806.         01h set preference
  1807.         DH = volume descriptor preference
  1808.             01h = primary volume descriptor
  1809.             02h = supplementary volume descriptor
  1810.         DL = supplementary volume descriptor preference
  1811.             01h = shift-Kanji
  1812.     CX = drive number (0=A:)
  1813. Return: CF set on error
  1814.         AX = error code (15=invalid drive,1=invalid function)
  1815.     CF clear if successful
  1816. ----------2F150F-----------------------------
  1817. INT 2F - Multiplex - CDROM 2.00 - GET DIRECTORY ENTRY
  1818.     AX = 150Fh
  1819.     CX = drive number (0=A:)
  1820.     ES:BX -> ASCIZ path name
  1821.     SI:DI -> 255-byte buffer for directory entry
  1822. Return: CF set on error
  1823.         AX = error code
  1824.     CF clear if succesful
  1825.         AX = disk format (0=High Sierra,1=ISO 9660)
  1826.  
  1827. Format of directory entry:
  1828. Offset    Size    Description
  1829.  00h    BYTE  length of directory entry
  1830.  01h    BYTE  length of XAR in LBN's (don't ask me what that means...)
  1831.  02h    DWORD LBN of data, Intel (little-endian) format
  1832.  06h    DWORD LBN of data, Motorola (big-endian) format
  1833.  0Ah    DWORD length of file, Intal format
  1834.  0Eh    DWORD length of file, Motorola format
  1835. ---High Sierra---
  1836.  12h  6 BYTEs date and time
  1837.  18h    BYTE  bit flags
  1838.  19h    BYTE  reserved
  1839. ---ISO 9660---
  1840.  12h  7 BYTEs date and time
  1841.  19h    BYTE  bit flags
  1842. ---both formats---
  1843.  1Ah    BYTE  interleave size
  1844.  1Bh    BYTE  interleave skip factor
  1845.  1Ch    WORD  volume set sequence number, Intel format
  1846.  1Eh    WORD  volume set sequence number, Motorola format
  1847.  20h    BYTE  length of file name
  1848.  21h  N BYTEs file name
  1849.     BYTE (optional) padding if filename is odd length
  1850.       N BYTEs system data
  1851. ----------2F1510-----------------------------
  1852. INT 2F - Multiplex - CDROM 2.10 - SEND DEVICE DRIVER REQUEST
  1853.     AX = 1510h
  1854.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  1855.     ES:BX -> CD-ROM device driver request header (see AX=0802h)
  1856. ----------2F1600-----------------------------
  1857. INT 2F - Multiplex - MS WINDOWS - WINDOWS ENHANCED MODE INSTALLATION CHECK
  1858.     AX = 1600h
  1859. Return: AL = 00h if Windows 3.x enhanced mode or Windows/386 2.x not running
  1860.     AL = 80h if Windows 3.x enhanced mode or Windows/386 2.x not running
  1861.     AL = 01h if Windows/386 2.x running
  1862.     AL = FFh if Windows/386 2.x running
  1863.     AL = anything else
  1864.         AL = Windows major version number >= 3
  1865.         AH = Windows minor version number
  1866. Note:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  1867.       drivers, TSRs, and applications) to cooperate with multitasking
  1868.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  1869.     certain calls are also supported in the Microsoft 80286 DOS extender in
  1870.       Windows standard mode
  1871. SeeAlso: AX=4680h
  1872. ----------2F1602-----------------------------
  1873. INT 2F - Multiplex - MS WINDOWS/386 2.x - GET API ENTRY POINT
  1874.     AX = 1602h
  1875. Return: ES:DI -> Windows/386 2.x API procedure entry point
  1876. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  1877.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  1878.         AX = 0000h
  1879.         ES:DI -> return address
  1880.         JUMP to address returned from INT 2F/AX=1602h
  1881.     After JUMP, at return address:
  1882.         BX = current VM ID.
  1883. ----------2F1605-----------------------------
  1884. INT 2F - Multiplex - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX INIT BROADCAST
  1885.     AX = 1605h
  1886.     ES:BX = 0000h:0000h
  1887.     DS:SI = 0000h:0000h
  1888.     CX = 0000h
  1889.     DX = flags
  1890.         bit 0 = 0 if Windows enhanced-mode initialization
  1891.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  1892.         bits 1-15 reserved (undefined)
  1893.     DI = version number (major in upper byte, minor in lower)
  1894. Return: CX = 0000h if okay for Windows to load
  1895.     CX <> 0 if Windows should not load
  1896.     ES:BX -> startup info structure (see below)
  1897.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  1898. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  1899.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  1900.       driver or TSR can watch for this broadcast and return the appropriate
  1901.       values.  If the driver or TSR returns CX <> 0, it is also its
  1902.       responsibility to display an error message.
  1903.     each handler must first chain to the prior INT 2F handler with
  1904.       registers unchanged before processing the call
  1905.     if the handler requires local data on a per-VM basis, it must store the
  1906.       returned ES:BX in the "next" field of a startup info structure and
  1907.       return a pointer to that structure in ES:BX
  1908.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  1909.       already nonzero, the TSR must fail the initialization by setting CX
  1910.       nonzero
  1911. SeeAlso: AX=1606h,AX=1608h
  1912.  
  1913. Format of Startup Information Structure:
  1914. Offset    Size    Description
  1915.  00h  2 BYTEs    major, minor version of info structure
  1916.  02h    DWORD    pointer to next startup info structure
  1917.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  1918.  0Ah    DWORD    virtual device reference data (only used if above nonzero)
  1919.  0Eh    DWORD    pointer to instance data records or 0000h:0000h
  1920.  
  1921. Format of one Instance Item in array:
  1922. Offset    Size    Description
  1923.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  1924.  04h    WORD    size of instance data
  1925.  
  1926. Virtual mode enable/disable procedure called with:
  1927.     AX = 0000h disable V86 mode
  1928.     AX = 0001h enable V86 mode
  1929.     interrupts disabled
  1930. Return: CF set on error
  1931.     CF clear if successful
  1932.     interrupts disabled
  1933. ----------2F1606-----------------------------
  1934. INT 2F - Multiplex - MS WINDOWS - WINDOWS ENH MODE & 286 DOSX EXIT BROADCAST
  1935.     AX = 1606h
  1936.     DX = flags
  1937.         bit 0 = 0 if Windows enhanced-mode exit
  1938.         bit 0 = 1 if Microsoft 286 DOS extender exit
  1939.         bits 1-15 reserved (undefined)
  1940. Return: CX = 0000h if okay for Windows to load
  1941.     CX <> 0 if Windows should not load
  1942. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  1943.       broadcast will be issued immediately.
  1944.     this call will be issued in real mode
  1945. SeeAlso: AX=1605h,AX=1609h
  1946. ----------2F1607-----------------------------
  1947. INT 2F - Multiplex - MS WINDOWS - VIRTUAL DEVICE CALL OUT API
  1948.     AX = 1607h
  1949.     BX = virtual device ID (see INT 2F/AX=1684h)
  1950. Note:    more of a convention than an API, this call specifies a standard
  1951.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  1952.       to DOS device drivers and TSRs
  1953. SeeAlso: AX=1605h,AX=1684h
  1954. ----------2F1608-----------------------------
  1955. INT 2F - Multiplex - MS WINDOWS - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  1956.     AX = 1608h
  1957. Notes:    called after all installable devices have been initialized
  1958.     real-mode software may be called between the Windows enhanced-mode init
  1959.       call (AX=1605h) and this call; the software must detect this
  1960.       situation
  1961. SeeAlso: AX=1605h,AX=1609h
  1962. ----------2F1609-----------------------------
  1963. INT 2F - Multiplex - MS WINDOWS - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  1964.     AX = 1609h
  1965. Note:    called at the beginning of a normal exit sequence; not made in the
  1966.       event of a fatal system crash
  1967. SeeAlso: AX=1606h,AX=1608h
  1968. ----------2F1680-----------------------------
  1969. INT 2F - Multiplex - various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  1970.     AX = 1680h
  1971. Return: AL = 00h if the call is supported
  1972.     AL = 80h (unchanged) if the call is not supported
  1973. Notes:    programs can use this function in idle loops to enhance performance
  1974.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  1975.       DPMI 1.0+, and will be supported in OS/2 2.0 for multitasking DOS
  1976.       applications
  1977.     does not block the program; it just gives up the remainder of the time
  1978.       slice
  1979.     should not be used by Windows programs
  1980. SeeAlso: INT 15/AX=1000h
  1981. ----------2F1681-----------------------------
  1982. INT 2F - Multiplex - MS WINDOWS 3+ - BEGIN CRITICAL SECTION
  1983.     AX = 1681h
  1984. Notes:    used to prevent a task switch from occurring
  1985.     should be followed by an INT 2F/AX=1682h call as soon as possible
  1986.     nested calls are allowed, and must be followed by an appropriate number
  1987.       of "end critical section" calls
  1988.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  1989.       and increment by hand.
  1990. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  1991. ----------2F1682-----------------------------
  1992. INT 2F - Multiplex - MS WINDOWS 3+ - END CRITICAL SECTION
  1993.     AX = 1682h
  1994. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  1995.       and decrement by hand, taking care not to decrement InDOS flag
  1996.       through zero
  1997. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  1998. ----------2F1683-----------------------------
  1999. INT 2F - Multiplex - MS WINDOWS 3+ - GET CURRENT VIRTUAL MACHINE ID
  2000.     AX = 1683h
  2001. Return: BX = current virtual machine (VM) ID
  2002. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  2003.     VM IDs are reused when VMs are destroyed
  2004.     an ID of 0 will never be returned
  2005. SeeAlso: AX=1684h,AX=1685h
  2006. ----------2F1684-----------------------------
  2007. INT 2F - Multiplex - MS WINDOWS - GET DEVICE API ENTRY POINT
  2008.     AX = 1684h
  2009.     BX = virtual device (VxD) ID (see below)
  2010.     ES:DI = 0000h:0000h
  2011. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  2012. Note:    some Windows enhanced-mode virtual devices provide services that
  2013.       applications can access.  For example, the Virtual Display Device
  2014.       (VDD) provides an API used in turn by WINOLDAP.
  2015. SeeAlso: AX=1683h
  2016.  
  2017. Values for VxD ID:
  2018.  01h    VMM        Virtual Machine Manager
  2019.  02h    Debug
  2020.  03h    VPICD        Virtual Prog. Interrupt Controller (PIC) Device
  2021.  04h    VDMAD        Virtual Direct Memory Access (DMA) Device
  2022.  05h    VTD        Virtual Timer Device
  2023.  06h    V86MMGR        Virtual 8086 Mode Device
  2024.  07h    PAGESWAP    Paging Device
  2025.  08h    Parity
  2026.  09h    Reboot
  2027.  0Ah    VDD        Virtual Display Device (GRABBER)
  2028.  0Bh    VSD        Virtual Sound Device
  2029.  0Ch    VMD        Virtual Mouse Device
  2030.  0Dh    VKD        Virtual Keyboard Device
  2031.  0Eh    VCD        Virtual COMM Device
  2032.  0Fh    VPD        Virtual Printer Device
  2033.  10h    VHD        Virtual Hard Disk Device
  2034.  11h    VMCPD
  2035.  12h    EBIOS        Reserve EBIOS page (e.g., on PS/2)
  2036.  13h    BIOSXLAT    Map ROM BIOS API between prot & V86 mode
  2037.  14h    VNETBIOS    Virtual NetBIOS Device
  2038.  15h    DOSMGR
  2039.  16h    WINLOAD
  2040.  17h    SHELL
  2041.  18h    VMPoll
  2042.  19h    VPROD
  2043.  1Ah    DOSNET        assures network integrity across VMs
  2044.  1Bh    VFD        Virtual Floppy Device
  2045.  1Ch    VDD2        Secondary display adapter
  2046.  1Dh    WINDEBUG
  2047.  1Eh    TSRLoad        TSR instance utility
  2048. Note:    The high bit of the VxD ID is reserved for future use. The
  2049.     next 10 bits are the OEM # which is assigned by Microsoft. The
  2050.     low 5 bits are the device number. 
  2051. ----------2F1685-----------------------------
  2052. INT 2F - Multiplex - MS WINDOWS - SWITCH VMs AND CALLBACK
  2053.     AX = 1685h
  2054.     BX = VM ID of virtual machine to switch to
  2055.     CX = flags
  2056.         bit 0 wait until interrupts enabled
  2057.         bit 1 wait until critical section unowned
  2058.         bits 2-15 reserved (zero)
  2059.     DX:SI = priority boost (see VMM.INC)
  2060.     ES:DI -> FAR procedure to callback
  2061. Return: CF set on error
  2062.         AX = error code
  2063.         01h invalid VM ID
  2064.         02h invalid priority boost
  2065.         03h invalid flags
  2066.     CF clear if successful
  2067.         event will be or has been called
  2068. Notes:    some DOS devices, such as networks, need to call functions in a
  2069.       specific VM. This call forces the appropriate VM to be installed.
  2070.     the callback procedure must preserve all registers and return with IRET
  2071. SeeAlso: AX=1683h,INT 15/AX=1117h
  2072. ----------2F1686-----------------------------
  2073. INT 2F - Multiplex - DOS Protected-Mode Interface - DETECT MODE
  2074.     AX = 1686h
  2075. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  2076.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  2077. SeeAlso: AX=1687h
  2078. ----------2F1687-----------------------------
  2079. INT 2F - Multiplex - DOS Protected-Mode Interface - INSTALLATION CHECK
  2080.     AX = 1687h
  2081. Return: AX = 0000h if installed
  2082.         BX = flags
  2083.         bit 0: 32-bit programs supported
  2084.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  2085.         DH = DPMI major version
  2086.         DL = two-digit DPMI minor version
  2087.         SI = number of paragraphs of DOS extender private data
  2088.         ES:DI -> DPMI mode-switch entry point
  2089.     AX nonzero if not installed
  2090. SeeAlso: AX=1686h
  2091.  
  2092. Call mode switch entry point with:
  2093.     AX = flags
  2094.         bit 0: set if 32-bit program
  2095.     ES = real mode segment of buffer for DPMI private data (ignored if
  2096.         SI was zero)
  2097. Return: CF set on error
  2098.         program still in real mode
  2099.         AX = error code (DPMI 1.0+)
  2100.            8011h unable to allocate all necessary descriptors
  2101.            8021h 32-bit program specified, but 16-bit DPMI host
  2102.     CF clear if successful
  2103.         CS = 16-bit selector corresponding to real-mode CS
  2104.         SS = selector corresponding to real-mode SS (64K limit)
  2105.         DS = selector corresponding to real-mode DS (64K limit)
  2106.         ES = selector to program's PSP (100h byte limit)
  2107.         FS = GS = 0
  2108.         high word of ESP = 0 if 32-bit program
  2109.         program now in protected mode
  2110. Note:    this entry point is only called for the initial switch to protected
  2111.       mode
  2112. ----------2F168A-----------------------------
  2113. INT 2F - Multiplex - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  2114.     AX = 168Ah
  2115.     DS:(E)SI = selector:offset of ASCIZ vendor name
  2116. Return: AL = status
  2117.         00h successful
  2118.            ES:(E)DI -> extended API entry point
  2119.         8Ah unsuccessful
  2120. Notes:    the vendor name is used to determin which entry point to return; it is
  2121.       case-sensitive
  2122.     available in protected mode only
  2123.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  2124.     not documented for DPMI 0.9
  2125. SeeAlso: INT 31/AX=0A00h
  2126. ----------2F1700-----------------------------
  2127. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - IDENTIFY WinOldAp VERSION
  2128.     AX = 1700h
  2129. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  2130.     AX <> 1700h
  2131.         AL = WINOLDAP major version
  2132.         AH = WINOLDAP minor version
  2133. Notes:    WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  2134.       "old" (character-mode) application access to Dynamic Data Exchange,
  2135.       menus, and the Windows clipboard.
  2136.     this installation check DOES NOT follow the format used by other
  2137.       software
  2138. ----------2F1701-----------------------------
  2139. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - OPEN CLIPBOARD
  2140.     AX = 1701h
  2141. Return:    AX <> 0     success
  2142.     AX = 0     clipboard is already open
  2143. ----------2F1702-----------------------------
  2144. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - EMPTY CLIPBOARD
  2145.     AX = 1702h
  2146. Return: AX <> 0     clipboard has been emptied
  2147.     AX = 0     failure
  2148. ----------2F1703-----------------------------
  2149. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - SET CLIPBOARD DATA
  2150.     AX = 1703h
  2151.     DX = clipboard format supported by WinOldAp:
  2152.         01h text
  2153.         02h bitmap
  2154.         03h metafile picture
  2155.         04h SYLK
  2156.         05h DIF
  2157.         06h TIFF
  2158.         07h OEM text
  2159.     ES:BX -> data (see below for formats)
  2160.     SI:CX = size of data
  2161. Return: AX <> 0 data copied into the Clipboard
  2162.     AX = 0 failure
  2163.  
  2164. Format of bitmap:
  2165. Offset    Size    Description
  2166.  00h    WORD    type (0000h)
  2167.  02h    WORD    width of bitmap in pixels
  2168.  04h    WORD    height of bitmap in pixels
  2169.  06h    WORD    bytes per line
  2170.  08h    BYTE    number of color planes
  2171.  09h    BYTE    number of adjacent color bits in pixel
  2172.  0Ah    DWORD    pointer to start of data
  2173.  0Eh    WORD    width in 0.1mm units
  2174.  10h    WORD    height in 0.1mm units
  2175.  12h  N BYTEs    bitmap data
  2176.  
  2177. Format of metafile picture:
  2178. Offset    Size    Description
  2179.  00h    WORD    mapping mode
  2180.  02h    WORD    X extent
  2181.  04h    WORD    Y extent
  2182.  06h    WORD    picture data
  2183. ----------2F1704-----------------------------
  2184. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA SIZE
  2185.     AX = 1704h
  2186.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  2187. Return:     DX:AX = size of data in bytes, including any headers
  2188. Failure: DX:AX = 0  no data in this format in the Clipboard
  2189. ----------2F1705-----------------------------
  2190. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - GET CLIPBOARD DATA
  2191.     AX = 1705h
  2192.     DX = clipboard format supported by WinOldAp (see AX=1703h)
  2193.     ES:BX -> buffer
  2194. Return: AX <> 0     success
  2195.     AX = 0     error, or no data in this format in Clipboard
  2196. ----------2F1708-----------------------------
  2197. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - CloseClipboard
  2198.     AX = 1708h
  2199. Return: AX <> 0 success
  2200.     AX = 0 failure
  2201. ----------2F1709-----------------------------
  2202. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - COMPACT CLIPBOARD
  2203.     AX = 1709h
  2204.     SI:CX = desired size in bytes
  2205. Return: DX:AX = number of bytes in largest block of free memory
  2206. Note:    WinOldAp is responsible for including the size of any headers
  2207. ----------2F170A-----------------------------
  2208. INT 2F - Multiplex - MS WINDOWS "WINOLDAP" - GET DEVICE CAPABILITIES
  2209.     AX = 170Ah
  2210.     DX = GDI information index
  2211.         00h device driver version
  2212.         02h device classification
  2213.         04h width in mm
  2214.         06h height in mm
  2215.         08h width in pixels
  2216.         0Ah height in pixels
  2217.         0Ch bits per pixel
  2218.         0Eh number of bit planes
  2219.         10h number of brushes supported by device
  2220.         12h number of pens supported by device
  2221.         14h number of markers supported by device
  2222.         16h number of fonts supported by device
  2223.         18h number of colors
  2224.         1Ah size required for device descriptor
  2225.         1Ch curve capabilities
  2226.         1Eh line capabilities
  2227.         20h polygon capabilities
  2228.         22h text capabilities
  2229.         24h clipping capabilities
  2230.         26h bitblt capabilities
  2231.         28h X aspect
  2232.         2Ah Y aspect
  2233.         2Ch length of hypotenuse of aspect
  2234.         58h logical pixels per inch of width
  2235.         5Ah logical pixels per inch of height
  2236. Return:     AX = integer value of the desired item
  2237.         device classification
  2238.             00h vector plotter
  2239.             01h raster display
  2240.             02h raster printer
  2241.             03h raster camera
  2242.             04h character-stream, PLP
  2243.             05h Metafile, VDM
  2244.             06h display-file
  2245.         curve capabilities
  2246.             bit 0  circles
  2247.             bit 1  pie wedges
  2248.             bit 2  chord arcs
  2249.             bit 3  ellipses
  2250.             bit 4  wide lines
  2251.             bit 5  styled lines
  2252.             bit 6  wide styled lines
  2253.             bit 7  interiors
  2254.         line capabilities
  2255.             bit 1  polylines
  2256.             bit 2  markers
  2257.             bit 3  polymarkers
  2258.             bit 4  wide lines
  2259.             bit 5  styled lines
  2260.             bit 6  wide styled lines
  2261.             bit 7  interiors
  2262.         polygon capabilities
  2263.             bit 0  polygons
  2264.             bit 1  rectangles
  2265.             bit 2  trapezoids
  2266.             bit 3  scanlines
  2267.             bit 4  wide borders
  2268.             bit 5  styled borders
  2269.             bit 6  wide styled borders
  2270.             bit 7  interiors
  2271.         text capabilities
  2272.             bit 0  output precision character
  2273.             bit 1  output precision stroke
  2274.             bit 2  clippping precision stroke
  2275.             bit 3  90-degree character rotation
  2276.             bit 4  arbitrary character rotation
  2277.             bit 5  independent X and Y scaling
  2278.             bit 6  double-size
  2279.             bit 7  integer scaling
  2280.             bit 8  continuous scaling
  2281.             bit 9  bold
  2282.             bit 10 italic
  2283.             bit 11 underline
  2284.             bit 12 strikeout
  2285.             bit 13 raster fonts
  2286.             bit 14 vector fonts
  2287.             bit 15 reserved
  2288.         clipping capabilities
  2289.             00h none
  2290.             01h clipping to rectangles
  2291.         raster capabilities
  2292.             bit 0  simple bitBLT
  2293.             bit 1  device requires banding support
  2294.             bit 2  device requires scaling support
  2295.             bit 3  supports >64K bitmap
  2296. Note:  This function returns the device-capability bits for the given display
  2297. ----------2F1900-----------------------------
  2298. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  2299.     AX = 1900h
  2300. Return: AL = 00h  not installed
  2301.          FFh  installed
  2302. ----------2F1901BL00-------------------------
  2303. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  2304.     AX = 1901h
  2305.     BL = 00h if SHELLC transient
  2306.          01h if SHELLC resident
  2307.     DS:DX -> far call entry point for resident SHELLC.EXE
  2308. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  2309. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  2310. ----------2F1902-----------------------------
  2311. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  2312.     AX = 1902h
  2313.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  2314.          final filename element uppercased
  2315.     DS:DX -> buffer for results
  2316. Return: AL = 00h  failed, either
  2317.           (a) final filename element quoted at ES:DI does not match
  2318.               identity of shell batch file quoted as parameter of most
  2319.               recent call of SHELLB command, or
  2320.           (b) no more Program Start Commands available.
  2321.     AL= FFh     success, then:
  2322.         memory at DS:[DX+1] onwards filled as:
  2323.         DX+1:    BYTE    count of bytes of PSC
  2324.         DX+2: N BYTEs    Program Start Command text
  2325.             BYTE    0Dh terminator 
  2326. Explanation: COMMAND.COM executes the result of this call in preference to 
  2327.     reading a command from a batch file. Thus the batch file does not
  2328.     advance in execution for so long as SHELLB provides PSCs from its
  2329.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  2330.     menu interface. The final PSC of a sequence is finished with a 
  2331.     GOTO COMMON, which causes a loop back in the batch file which called
  2332.     SHELLC so as to execute SHELLC again. The check on batch file name
  2333.     permits PSCs to CALL nested batch files while PSCs are still stacked
  2334.     up for subsequent execution.
  2335. ----------2F1903-----------------------------
  2336. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  2337.     AX = 1903h
  2338.     ES:DI -> ASCIZ batch file name as for AX=1902h
  2339. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  2340.     AL = 00h if it does not
  2341. ----------2F1904-----------------------------
  2342. INT 2F - Multiplex - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  2343.     AX = 1904h
  2344. Return: ES:DI -> name of current shell batch file:
  2345.         WORD    number of bytes of name following
  2346.         BYTEs    (8 max) uppercase name of shell batch file
  2347. ----------2F1A00-----------------------------
  2348. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - INSTALLATION CHECK
  2349.     AX = 1A00h
  2350. Return: AL = FFh if installed
  2351. Note:    AVATAR.SYS also responds to this call
  2352. ----------2F1A00BX4156-----------------------
  2353. INT 2F - Multiplex - AVATAR.SYS - INSTALLATION CHECK
  2354.     AX = 1A00h
  2355.     BX = 4156h ('AV')
  2356.     CX = 4154h ('AT')
  2357.     DX = 4152h ('AR')
  2358. Return: AL = FFh if installed
  2359.         CF clear
  2360.         BX = AVATAR protocol level supported
  2361.         CX = driver type
  2362.         0000h AVATAR.SYS
  2363.         4456h DVAVATAR.COM inside DESQview window
  2364.         DX = 0016h
  2365. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  2366.       the magic values
  2367.     AVATAR.SYS is a CON replacement by George Adam Stanislav which
  2368.       interprets AVATAR command codes in the same way that ANSI interprets
  2369.       ANSI command codes
  2370. ----------2F1A01-----------------------------
  2371. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  2372.     AX = 1A01h
  2373.     CL = function
  2374.         7Fh for GET
  2375.         5Fh for SET
  2376.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  2377. Return: CF set on error
  2378.         AX = error code (many non-standard)
  2379.     CF clear if successful
  2380.         AX destroyed
  2381. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  2382. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  2383. ----------2F1A02-----------------------------
  2384. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - MISC REQUESTS
  2385.     AX = 1A02h
  2386.     DS:DX -> parameter block (see below)
  2387. Note:    DOS 5.0 chains to previous handler if AL > 02h on call
  2388. SeeAlso: AX=1A01h
  2389.  
  2390. Format of parameter block:
  2391. Offset    Size    Description
  2392.  00h    BYTE    subfunction
  2393.         00h set/reset interlock
  2394.         01h get /L flag
  2395.  01h    BYTE    interlock state
  2396.         00h=reset, 01h=set
  2397.           This interlock prevents some of the ANSI.SYS post-processing
  2398.           in its hook onto INT 10, AH=00h mode set
  2399.  02h    BYTE    (returned)
  2400.         00h if /L not in effect
  2401.         01h if /L in effect
  2402. ----------2F1A21-----------------------------
  2403. INT 2F - Multiplex - AVATAR.SYS - SET DRIVER STATE
  2404.     AX = 1A21h (AL='!')
  2405.     DS:SI -> command string with one or more state characters
  2406.     CX = length of command string
  2407. Return: CF set on error (invalid subfunction)
  2408.     CF clear if successful
  2409. Note:    the characters in the state string are interpreted left to right, and
  2410.       need not be in any particular order
  2411. SeeAlso: AX=1A3Fh
  2412.  
  2413. Values of state characters:
  2414.  'a'    activate driver
  2415.  'd'    disable driver
  2416.  'f'    use fast screen output
  2417.  'g'    always convert gray keys (+ and -) to function keys
  2418.  'G'    never convert gray keys
  2419.  'l'    convert gray keys only when ScrollLock active
  2420.  's'    use slow screen output
  2421.  't'    Tandy 1000 keyboard (not yet implemented)
  2422. ----------2F1A3C-----------------------------
  2423. INT 2F - Multiplex - AVATAR.SYS v0.11 - ???
  2424.     AX = 1A3Ch
  2425.     ???
  2426. Return: CX = 0000h
  2427. ----------2F1A3E-----------------------------
  2428. INT 2F - Multiplex - AVATAR.SYS v0.11 - ???
  2429.     AX = 1A3Eh
  2430.     CL = ???
  2431.     CH = ???
  2432.     DL = ???
  2433.     DH = ???
  2434. Return: CL = ???
  2435.     CH = ???
  2436.     DL = ???
  2437.     DH = ???
  2438. ----------2F1A3F-----------------------------
  2439. INT 2F - Multiplex - AVATAR.SYS - QUERY DRIVER STATE
  2440.     AX = 1A3Fh (AL='?')
  2441.     ES:DI -> buffer
  2442.     CX = length of buffer in bytes
  2443. Return: CF clear
  2444.     CX = actual size of returned info
  2445. Note:    the returned information consists of multiple letters whose meanings
  2446.       are described under AX=1A21h
  2447. SeeAlso: AX=1A21h
  2448. ----------2F1A42BX4156-----------------------
  2449. INT 2F - Multiplex - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  2450.     AX = 1A42h
  2451.     BX = 4156h ('AV')
  2452.     ES:DI -> FAR handler for serial port using IRQ3
  2453.     DS = data segment needed by handler
  2454. Return: AX = 1A42h if ASD not installed
  2455.        = 0000h if no more room
  2456.        else handle to use when uninstalling
  2457. Notes:    the handler need not save/restore registers or signal EOI to the
  2458.       interrupt controller
  2459.     the handler should return AX=0000h if the interrupt was meant for it,
  2460.       and either leave AX unchanged or return a non-zero value otherwise
  2461.     the most recently installed handler will be called first, continuing
  2462.       to earlier handlers until one returns AX=0000h
  2463. SeeAlso: AX=1A43h,AX=1A62h
  2464. ----------2F1A43BX4156-----------------------
  2465. INT 2F - Multiplex - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  2466.     AX = 1A43h
  2467.     BX = 4156h ('AV')
  2468.     ES:DI -> FAR handler for serial port using IRQ4
  2469.     DS = data segment needed by handler
  2470. Return: AX = 1A43h if ASD not installed
  2471.        = 0000h if no more room
  2472.        else handle to use when uninstalling
  2473. Notes:    (see AX=1A42h)
  2474. SeeAlso: AX=1A42h,AX=1A63h
  2475. ----------2F1A44BX4156-----------------------
  2476. INT 2F - Multiplex - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  2477.     AX = 1A44h
  2478.     BX = 4156h ('AV')
  2479. Return: AX = 0000h
  2480.     DS = data segment
  2481.     CX = size of data segment
  2482. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  2483.       process under a multitasker hooks this function and provides a
  2484.       separate data segment, AVATAR.SYS becomes fully reentrant.
  2485. SeeAlso: AX=1A21h,AX=1A3Fh
  2486. ----------2F1A52-----------------------------
  2487. INT 2F - Multiplex - AVATAR.SYS v0.11 - GET ???
  2488.     AX = 1A52h
  2489.     CX = size of buffer
  2490.     ES:DI -> buffer
  2491. Return: ??? copied into user buffer
  2492. Note:    the maximum size of the data which may be copied is returned by
  2493.       AX=1A72h
  2494. SeeAlso: AX=1A72h
  2495. ----------2F1A53-----------------------------
  2496. INT 2F - Multiplex - AVATAR.SYS v0.11 - ???
  2497.     AX = 1A53h
  2498.     CL = ??? (00h-05h)
  2499.     ???
  2500. Return: ???
  2501. ----------2F1A62BX4156-----------------------
  2502. INT 2F - Multiplex - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  2503.     AX = 1A62h
  2504.     BX = 4156h ('AV')
  2505.     CX = handle for IRQ routine returned by AX=1A42h
  2506. SeeAlso: AX=1A42h,AX=1A63h
  2507. ----------2F1A63BX4156-----------------------
  2508. INT 2F - Multiplex - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  2509.     AX = 1A63h
  2510.     BX = 4156h ('AV')
  2511.     CX = handle for IRQ routine returned by AX=1A43h
  2512. SeeAlso: AX=1A43h,AX=1A62h
  2513. ----------2F1A72-----------------------------
  2514. INT 2F - Multiplex - AVATAR.SYS v0.11 - GET ??? SIZE
  2515.     AX = 1A72h
  2516. Return: CX = maximum size of ???
  2517. SeeAlso: AX=1A52h
  2518. ----------2F1A7B-----------------------------
  2519. INT 2F - Multiplex - AVATAR.SYS v0.11 - ???
  2520.     AX = 1A7Bh
  2521. Return: AX = 0000h
  2522.     CX = 0000h
  2523. ----------2F1A7D-----------------------------
  2524. INT 2F - Multiplex - AVATAR.SYS v0.11 - ???
  2525.     AX = 1A7Dh
  2526. Return: AX = ???
  2527. ----------2F1AADDX0000-----------------------
  2528. INT 2F - Multiplex - AVATAR.SYS v0.11 - ???
  2529.     AX = 1AADh
  2530.     DX = 0000h
  2531.     CX = subfunction (00h-0Ch)
  2532.     ???
  2533. Return: AX = 0000h if DX was nonzero
  2534.     ???
  2535. ----------2F1B00-----------------------------
  2536. INT 2F - Multiplex - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  2537.     AX = 1B00h
  2538. Return: AL = FFh if installed
  2539. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  2540.     This extension hooks onto INT 67/AH=58h and returns from that call data
  2541.       which excludes the physical pages being used by DOS.
  2542. SeeAlso: AX=1Bh"FRAME INFO"
  2543. ----------2F1B-------------------------------
  2544. INT 2F - Multiplex - DOS 4+ XMA2EMS.SYS extens internal - GET HIDDEN FRAME INFO
  2545.     AH = 1Bh
  2546.     AL <> 00h
  2547.     DI = hidden physical page number
  2548. Return: AX = FFFFh if failed (no such hidden page)
  2549.     AX = 0000h if OK, then
  2550.          ES = segment of page frame
  2551.          DI = physical page number
  2552. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  2553.     FASTOPEN makes this call with AL = FFh
  2554. SeeAlso: AX=1B00h
  2555. ----------2F4001-----------------------------
  2556. INT 2F - Multiplex - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  2557.     AX = 4001h
  2558. Note:    called by OS/2 when the DOS box is about to be placed in the background
  2559. SeeAlso: AX=4002h
  2560. ----------2F4002-----------------------------
  2561. INT 2F - Multiplex - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  2562.     AX = 4002h
  2563. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  2564. SeeAlso: AX=4001h
  2565. ----------2F41-------------------------------
  2566. INT 2F - LAN Manager 2.0 DOS Enhanced NETPOPUP.EXE - NETWORK POP-UP SERVICE
  2567.     AH = 41h
  2568.     ???
  2569. Return: ???
  2570. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  2571.       file/printer services
  2572. SeeAlso: AX=118Ah,AH=42h,AH=4Bh
  2573. ----------2F42-------------------------------
  2574. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  2575.     AH = 42h
  2576.     ???
  2577. Return: ???
  2578. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  2579.       file/printer services
  2580. SeeAlso: AX=118Ah,AH=41h,AH=4Bh
  2581. ----------2F4300-----------------------------
  2582. INT 2F - Multiplex - XMS - INSTALLATION CHECK
  2583.     AX = 4300h
  2584. Return: AL = 80h XMS driver installed
  2585.     AL <> 80h no driver
  2586. Notes:    XMS gives access to extended memory and noncontiguous/nonEMS memory
  2587.       above 640K
  2588.     this installation check DOES NOT follow the format used by other
  2589.       software
  2590. SeeAlso: AX=4310h
  2591. ----------2F4310-----------------------------
  2592. INT 2F - Multiplex - XMS - GET DRIVER ADDRESS
  2593.     AX = 4310h
  2594. Return: ES:BX -> driver entry point
  2595. Note:    HIMEM.SYS v2.77 chains to previous handler if AH is not 00h or 10h
  2596. SeeAlso: AX=4300h
  2597.  
  2598. Perform a FAR call to the driver entry point with AH set to the function code
  2599.     AH    function
  2600.     00h  Get XMS version number
  2601.          Return: AX = XMS version (in BCD)
  2602.              BX = internal revision number
  2603.              DX = 0001h if HMA (1M to 1M + 64K) exists
  2604.               0000h if HMA does not exist
  2605.     01h  Request High Memory Area (1M to 1M + 64K)
  2606.          DX = memory in bytes (for TSR or device drivers)
  2607.           FFFFh if application program
  2608.          Return: AX = 0001h success
  2609.             = 0000h failure
  2610.                BL = error code (see below)
  2611.     02h  Release High Memory Area
  2612.          Return: AX = 0001h success
  2613.             = 0000h failure
  2614.                BL = error code (see below)
  2615.     03h  Global enable A20, for using the HMA
  2616.          Return: AX = 0001h success
  2617.             = 0000h failure
  2618.                BL = error code (see below)
  2619.     04h  Global disable A20
  2620.          Return: AX = 0001h success
  2621.             = 0000h failure
  2622.                BL = error code (see below)
  2623.     05h  Local enable A20, for direct access to extended memory
  2624.          Return: AX = 0001h success
  2625.             = 0000h failure
  2626.                BL = error code (see below)
  2627.     06h  Local disable A20
  2628.          Return: AX = 0001h success
  2629.             = 0000h failure
  2630.                BL = error code (see below)
  2631.     07h  Query A20 state
  2632.          Return: AX = 0001h enabled
  2633.             = 0000h disabled
  2634.              BL = error code (0 = successful)
  2635.     08h  Query free extended memory, not counting HMA
  2636.          Return: AX = size of largest extended memory block in K
  2637.              DX = total extended memory in K
  2638.              BL = error code (see below)
  2639.     09h  Allocate extended memory block
  2640.          DX = Kbytes needed
  2641.          Return: AX = 0001h success
  2642.                DX = handle for memory block
  2643.             = 0000h failure
  2644.                BL = error code (see below)
  2645.     0Ah  Free extended memory block
  2646.          DX = handle of block to free
  2647.          Return: AX = 0001h success
  2648.             = 0000h failure
  2649.                BL = error code (see below)
  2650.     0Bh  Move extended memory block
  2651.          DS:SI -> EMM structure (see below)
  2652.          Note: if either handle is 0000h, the corresponding offset is
  2653.            considered to be an absolute segment:offset address in
  2654.            directly addressable memory
  2655.          Return: AX = 0001h success
  2656.             = 0000h failure
  2657.                BL = error code (see below)
  2658.     0Ch  Lock extended memory block
  2659.          DX = handle of block to lock
  2660.          Return: AX = 0001h success
  2661.                DX:BX = 32-bit linear address of locked block
  2662.             = 0000h failure
  2663.                BL = error code (see below)
  2664.     0Dh  Unlock extended memory block
  2665.          DX = handle of block to unlock
  2666.          Return: AX = 0001h success
  2667.             = 0000h failure
  2668.                BL = error code (see below)
  2669.     0Eh  Get handle information
  2670.          DX = handle for which to get info
  2671.          Return: AX = 0001h success
  2672.                BH = block's lock count
  2673.                BL = number of free handles left
  2674.                DX = block size in K
  2675.             = 0000h failure
  2676.                BL = error code (see below)
  2677.     0Fh  Reallocate extended memory block
  2678.          DX = handle of block
  2679.          BX = new size of block in K
  2680.          Return: AX = 0001h success
  2681.             = 0000h failure
  2682.                BL = error code (see below)
  2683.     10h  Request upper memory block (nonEMS memory above 640K)
  2684.          DX = size of block in paragraphs
  2685.          Return: AX = 0001h success
  2686.                BX = segment address of UMB
  2687.                DX = actual size of block
  2688.             = 0000h failure
  2689.                BL = error code (see below)
  2690.                DX = largest available block
  2691.     11h  Release upper memory block
  2692.          DX = segment address of UMB to release
  2693.          Return: AX = 0001h success
  2694.             = 0000h failure
  2695.                BL = error code (see below)
  2696. Note:    HIMEM.SYS requires at least 256 bytes free stack space
  2697.  
  2698. Format of EMM structure:
  2699. Offset    Size    Description
  2700.  00h    DWORD    number of bytes to move (must be even)
  2701.  04h    WORD    source handle
  2702.  06h    DWORD    offset into source block
  2703.  0Ah    WORD    destination handle
  2704.  0Ch    DWORD    offset into destination block
  2705.  
  2706. Error codes returned in BL:
  2707.     80h Function not implemented
  2708.     81h Vdisk was detected
  2709.     82h An A20 error occurred
  2710.     8Eh a general driver error
  2711.     8Fh unrecoverable driver error
  2712.     90h HMA does not exist
  2713.     91h HMA is already in use
  2714.     92h DX is less than the /HMAMIN= parameter
  2715.     93h HMA is not allocated
  2716.     94h A20 line still enabled
  2717.     A0h all extended memory is allocated
  2718.     A1h all available extended memory handles are allocated
  2719.     A2h Invalid handle
  2720.     A3h Source handle is invalid
  2721.     A4h Source offset is invalid
  2722.     A5h Destination handle is invalid
  2723.     A6h Destination offset is invalid
  2724.     A7h Length is invalid
  2725.     A8h Move has an invalid overlap
  2726.     A9h Parity error occurred
  2727.     AAh Block is not locked
  2728.     ABh Block is locked
  2729.     ACh Block lock count overflowed
  2730.     ADh Lock failed
  2731.     B0h Only a smaller UMB is available
  2732.     B1h No UMB's are available
  2733.     B2h UMB segment number is invalid
  2734. ----------2F4601-----------------------------
  2735. INT 2F - Multiplex - DOS 5.0 kernel - ???
  2736.     AX = 4601h
  2737. Return: ???
  2738. Note:    copies the MCB following the caller's PSP memory block into DOS data
  2739.       segment
  2740. SeeAlso: AX=4602h
  2741. ----------2F4602-----------------------------
  2742. INT 2F - Multiplex - DOS 5.0 kernel - ???
  2743.     AX = 4602h
  2744. Return: ???
  2745. Note:    copies previously copied MCB from DOS data segment into MCB following
  2746.       caller's PSP memory block
  2747. SeeAlso: AX=4601h
  2748. ----------2F4653CX0002-----------------------
  2749. INT 2F - Multiplex - F-LOCK.EXE 
  2750.     AX = 4653h
  2751.     CX = 0002h
  2752.     BX = subfunction
  2753.         0000h  installation check
  2754.         Return: AX = FFFFh
  2755.         0001h  uninstall
  2756.         Return: AX,BX,ES destroyed
  2757.         0002h  disable (v1.08 and below only)
  2758.         0003h  enable (v1.08 and below only)
  2759. Note:    F-LOCK is part of the F-PROT virus/trojan protection package by Fridrik
  2760.       Skulason
  2761. SeeAlso: AX=4653h/CX=0003h,INT 21/AX=4BEEh
  2762. ----------2F4653CX0003-----------------------
  2763. INT 2F - Multiplex - F-XCHK.EXE
  2764.     AX = 4653h
  2765.     CX = 0003h
  2766.     BX = subfunction
  2767.         0000h  installation check
  2768.         Return: AX = FFFFh
  2769.         0001h  uninstall
  2770.         Return: AX,BX,ES destroyed
  2771. Note:    F-XCHK is part of the F-PROT virus/trojan protection package by Fridrik
  2772.       Skulason
  2773. SeeAlso: AX=4653h/CX=0002h,AX=4653h/CX=0004h
  2774. ----------2F4653CX0004-----------------------
  2775. INT 2F - Multiplex - F-POPUP.EXE
  2776.     AX = 4653h
  2777.     CX = 0004h
  2778.     BX = subfunction
  2779.         0000h  installation check
  2780.         Return: AX = FFFFh
  2781.         0001h  uninstall
  2782.         Return: AX,BX,ES destroyed
  2783.         0002h  disable (v1.08 and below only)
  2784.            display message (v1.14+)
  2785.             other registers: ???
  2786.         0003h  enable (v1.08 and below only)
  2787.            display message (v1.14+)
  2788.             other registers: ???
  2789.             Return: AX = key pressed by user
  2790. Note:    F-POPUP is part of the F-PROT virus/trojan protection package by
  2791.       Fridrik Skulason
  2792. SeeAlso: AX=4653h/CX=0003h,AX=4653h/CX=0005h
  2793. ----------2F4653CX0005-----------------------
  2794. INT 2F - Multiplex - F-DLOCK.EXE
  2795.     AX = 4653h
  2796.     CX = 0005h
  2797.     BX = subfunction
  2798.         0000h installation check
  2799.         Return: AX = FFFFh
  2800.         0001h uninstall
  2801.         Return: AX,BX,ES destroyed
  2802. Note:    F-DLOCK is part of the F-PROT virus/trojan protection package by
  2803.       Fridrik Skulason
  2804. SeeAlso: AX=4653h/CX=0004h
  2805. ----------2F4680-----------------------------
  2806. INT 2F - Multiplex - MS Windows 3 - INSTALLATION CHECK
  2807.     AX = 4680h
  2808. Return: AX = 0000h MS Windows 3.0 running in real (/R) or standard (/S) mode
  2809.        nonzero  no Windows, Windows prior to 3.0, or Windows3 in enhanced
  2810.             mode
  2811. Note:    not officially documented, but Microsoft has indicated that they
  2812.       intend to provide an installation check which works in all modes
  2813. SeeAlso: AX=1600h
  2814. ----------2F4800-----------------------------
  2815. INT 2F - Multiplex - DOS 5+ DOSKEY - INSTALLATION CHECK
  2816.     AX = 4800h
  2817. Return: AL = FFh if installed
  2818. SeeAlso: AX=4810h
  2819. ----------2F4810-----------------------------
  2820. INT 2F - Multiplex - DOS 5+ DOSKEY - READ INPUT LINE FROM CONSOLE
  2821.     AX = 4810h
  2822.     DS:DX -> line buffer (see INT 21/AH=0Ah)
  2823. Return: AX = 0000h
  2824. Note:    the first byte (length) of the buffer MUST be 80h, or DOSKEY chains to
  2825.       the previous handler
  2826. SeeAlso: AX=4800h,INT 21/AH=0Ah
  2827. ----------2F4A01-----------------------------
  2828. INT 2F - Multiplex - DOS 5.0 - QUERY FREE HMA SPACE
  2829.     AX = 4A01h
  2830. Return: BX = number of bytes available in HMA (0000h if DOS not using HMA)
  2831.     ES:DI -> start of available HMA area (FFFFh:FFFFh if not using HMA)
  2832. SeeAlso: AX=4310h,AX=4A02h
  2833. ----------2F4A02-----------------------------
  2834. INT 2F - Multiplex - DOS 5.0 - ALLOCATE HMA SPACE
  2835.     AX = 4A02h
  2836.     BX = number of bytes
  2837. Return: ES:DI -> start of allocated HMA block or FFFFh:FFFFh
  2838.     BX destroyed
  2839. Note:    this call is not valid unless DOS is loaded in the HMA (DOS=HIGH)
  2840. SeeAlso: AX=4A01h
  2841. ----------2F4A05-----------------------------
  2842. INT 2F - DOS 5 DOSSHELL - ???
  2843.     AX = 4A05h
  2844.     SI = function
  2845.         0000h reset???
  2846.         0001h ???
  2847.         0002h ???
  2848.         0003h ???
  2849.         0004h ???
  2850.             BL = ???
  2851.         0005h ???
  2852.         0006h get ???
  2853.             Return: ES:DI -> ???
  2854.         0007h get ???
  2855.             Return: AX = ???
  2856.         0008h get ???
  2857.             Return: DX:AX -> ???
  2858.         0009h get ???
  2859.             Return: ES = ???
  2860.         000Ah ???
  2861.             BL = ???
  2862.         ES:DI -> ???
  2863.         000Bh get ???
  2864.             Return: AX = ???
  2865.         000Ch ???
  2866.             BL = ???
  2867.         Return: DX:AX -> ???
  2868. Note:    DOSSHELL chains to the previous handler if SI is not one of the values
  2869.       listed above
  2870. SeeAlso: AX=4B01h
  2871. ----------2F4B-------------------------------
  2872. INT 2F - LAN Manager 2.0 DOS Enh NETWKSTA.EXE - NETWORK WORKSTATION REDIRECTOR
  2873.     AH = 4Bh
  2874.     ???
  2875. Return: ???
  2876. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  2877.       file/printer services
  2878. SeeAlso: AX=118Ah,AH=41h,AH=42h
  2879. ----------2F4B01-----------------------------
  2880. INT 2F - DOS 5 DOSSHELL TASK SWITCHER - BUILD CALLOUT CHAIN
  2881.     AX = 4B01h
  2882.     details not yet available
  2883. SeeAlso: AX=4B02h
  2884. ----------2F4B02BX0000-----------------------
  2885. INT 2F - DOS 5 DOSSHELL TASK SWITCHER - INSTALLATION CHECK
  2886.     AX = 4B02h
  2887.     BX = 0000h
  2888.     ES:DI = 0000h:0000h
  2889. Return: CF clear if task switcher loaded
  2890.         AX = 0000h
  2891.         BX = 0000h
  2892.         ES:DI -> task switcher entry point (see below)
  2893. SeeAlso: AX=4A05h,AX=4B03h
  2894.  
  2895. Call task switcher entry point with:
  2896.     AX = 0000h get status???
  2897.         Return: ES:BX -> 51-byte structure
  2898.                 (0Ch DWORD -> ASCIZ signature
  2899.                         "MS-DOS Shell Task Switcher")
  2900.     AX = 0001h ???
  2901.         ES:DI -> ???
  2902.         CX = ???
  2903.     AX = 0002h set ??? flag
  2904.     AX = 0003h clear ??? flag
  2905.     AX = 0004h NOP
  2906.     AX = 0005h NOP
  2907.     AX = 0006h ???
  2908.         BX = ???
  2909.         Return: BX = ???
  2910. Return: AX = status 
  2911.         0000h successful
  2912.         0001h ???
  2913.         0002h ???
  2914. ----------2F4B03-----------------------------
  2915. INT 2F - DOS 5 DOSSHELL TASK SWITCHER - ALLOCATE SWITCHER ID
  2916.     AX = 4B03h
  2917. Return: AX = 0000h
  2918.     BX = switcher ID, or 0000h if no more available
  2919. Note:    this call is available from within DOSSHELL even if the task switcher
  2920.       is not installed
  2921. SeeAlso: AX=4B02h,AX=4B04h
  2922. ----------2F4B04-----------------------------
  2923. INT 2F - DOS 5 DOSSHELL TASK SWITCHER - FREE SWITCHER ID
  2924.     AX = 4B04h
  2925.     BX = switcher ID
  2926. Return: AX = 0000h
  2927.     BX = status
  2928.         0000h successful
  2929.         FFFFh error (invalid ID or ID not allocated)
  2930. Note:    this call is available from within DOSSHELL even if the task switcher
  2931.       is not installed
  2932. SeeAlso: AX=4B02h,AX=4B03h
  2933. ----------2F4B05-----------------------------
  2934. INT 2F - DOS 5 DOSSHELL TASK SWITCHER - IDENTIFY INSTANCE DATA
  2935.     AX = 4B05h
  2936.     details not yet available
  2937. SeeAlso: AX=4B02h
  2938. ----------2F5453-----------------------------
  2939. INT 2F - Multiplex - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  2940.     AX = 5453h
  2941.     BX = subfunction
  2942.         00h installation check
  2943.         CX = 0000h
  2944.         DS:SI -> 8-char blank-padded name
  2945.         Return: AX = FFFFh installed
  2946.                 CX = ID number of already-installed copy
  2947.                = anything else, not installed
  2948.                 CX = ID number for TSR when installed
  2949.         01h get user parameters
  2950.         CX = TSR ID number
  2951.         Return: AX = 0000h successful
  2952.                ES:BX -> user parameter block (see below)
  2953.                = nonzero failed
  2954.         02h check if hotkey in use
  2955.         CL = scan code of hot key
  2956.         Return: AX = FFFFh hot key conflicts with another TSR
  2957.                  otherwise safe to use the hotkey
  2958.         03h replace default critical error handler
  2959.         CX = TSR ID number
  2960.         DS:SI -> new routine for INT 24h
  2961.         Return: AX = nonzero, unable to install new handler
  2962.         04h get internal data area
  2963.         CX = TSR ID number
  2964.         Return: AX = 0000h
  2965.                 ES:BX -> TSR's internal data area (see below)
  2966.                = nonzero, TSR not found
  2967.         05h set multiple hot keys
  2968.         CX = TSR ID number
  2969.         DL = number of additional hot keys to allocate
  2970.         DS:SI -> table of hot keys
  2971.             BYTE  hotkey scan code
  2972.             BYTE  hotkey shift state
  2973.             BYTE  flag value to pass to TSR (nonzero)
  2974.         Return: AX = nonzero, unable to install hot keys
  2975.         06h - 0Fh reserved
  2976.         10h enable TSR
  2977.         CX = TSR ID number
  2978.         Return: AX = nonzero, unable to enable
  2979.         11h disable TSR
  2980.         CX = TSR ID number
  2981.         Return: AX = nonzero, unable to disable
  2982.         12h unload TSR
  2983.         CX = TSR ID number
  2984.         Return: AX = nonzero, invalid TSR number
  2985.         Note: if any interrupts used by TSR have been grabbed by
  2986.             another TSR, the TesSeRact routines will wait until
  2987.             it is safe to remove the indicated TSR from memory
  2988.         13h restart TSR
  2989.         CX = TSR ID number of TSR which was unloaded but is still in
  2990.              memory
  2991.         Return: AX = nonzero, unable to restart TSR
  2992.         14h get status word
  2993.         CX = TSR ID number
  2994.         Return: AX = FFFFh invalid ID number
  2995.                = other, successful
  2996.                 BX = bit flags
  2997.         15h set status word
  2998.         CX = TSR ID number
  2999.         DX = new bit flags
  3000.         Return: AX = nonzero, unable to set status word
  3001.         16h get INDOS state at popup
  3002.         CX = TSR ID number
  3003.         Return: AX = 0000h successful
  3004.                 BX = value of INDOS flag
  3005.         17h - 1Fh reserved
  3006.         20h call user procedure
  3007.         CX = TSR ID number
  3008.         ES:DI -> user-defined data
  3009.         Return: AX = 0000h successful
  3010.         21h stuff keystrokes into keyboard buffer
  3011.         CX = TSR ID number
  3012.         DL = speed
  3013.             00h stuff keystrokes only when buffer is empty
  3014.             01h stuff up to four keystrokes per clock tick
  3015.             02h stuff up to 15 keystrokes per clock tick
  3016.         DH = scan code flag
  3017.             if zero, buffer contains alternating ASCII and scan codes
  3018.             if nonzero, buffer contains only ASCII codes
  3019.         SI = number of keystrokes
  3020.         ES:DI -> buffer to stuff
  3021.         Return: AX = 0000h success
  3022.                  F0F0h user aborted with ^C or ^Break
  3023.                  other unable to stuff keystrokes
  3024.         22h (v1.10) trigger popup
  3025.         CX = TSR ID number
  3026.         Return: AX = 0000h success, TSR will either pop up or beep to
  3027.                    indicate that it is unable to pop up
  3028.                  nonzero invalid ID number
  3029.         23h (v1.10) invoke TSR's background function
  3030.         CX = TSR ID number
  3031.         Return: AX = 0000h success
  3032.                  FFFFh not safe to call background function
  3033.                  nonzero invalid ID number
  3034.         24h - 2Fh reserved
  3035. Notes:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  3036.       fully supports the TesSeRact API, as do the SWAP?? programs by 
  3037.       Innovative Data Concepts.
  3038.     AVATAR.SYS supports functions 00h and 01h (only the first three fields
  3039.       of the user parameter block) using the name "AVATAR  "
  3040.  
  3041. Format of User Parameter Block:
  3042. Offset    Size    Description
  3043.  00h  8 BYTEs    blank-padded TSR name
  3044.  08h    WORD    TSR ID number
  3045.  0Ah    DWORD    bitmap of supported functions
  3046.  0Eh    BYTE    scan code of primary hotkey
  3047.             00h = pop up when shift states match
  3048.             FFh = no popup (if shift state also FFh)
  3049.  0Fh    BYTE    shift state of primary hotkey
  3050.             FFh = no popup (if scan code also FFh)
  3051.  10h    BYTE    number of secondary hotkeys
  3052.  11h    DWORD    pointer to extra hotkeys set by func 05h
  3053.  15h    WORD    current TSR status flags
  3054.  17h    WORD    PSP segment of TSR
  3055.  19h    DWORD    DTA for TSR
  3056.  1Dh    WORD    default DS for TSR
  3057.  1Fh    DWORD    stack at popup
  3058.  23h    DWORD    stack at background invocation
  3059.  
  3060. Format of TSR internal data area:
  3061. Offset    Size    Description
  3062.  00h    BYTE    revision level of TesSeRact library
  3063.  01h    BYTE    type of popup in effect
  3064.  02h    BYTE    INT 08 occurred since last invocation
  3065.  03h    BYTE    INT 13 occurred since last invocation
  3066.  04h    BYTE    active interrupts
  3067.  05h    BYTE    active soft interrupts
  3068.  06h    BYTE    DOS major version
  3069.  07h    BYTE    how long to wait before popping up
  3070.  08h    DWORD    pointer to INDOS flag
  3071.  0CH    DWORD    pointer to DOS critical error flag
  3072.  10h    WORD    PSP segment of interrupted program
  3073.  12h    WORD    PSP segment of prog interrupted by INT 28
  3074.  14h    DWORD    DTA of interrupted program
  3075.  18h    DWORD    DTA of program interrupted by INT 28
  3076.  1Ch    WORD    SS of interrupted program
  3077.  1Eh    WORD    SP of interrupted program
  3078.  20h    WORD    SS of program interrupted by INT 28
  3079.  22h    WORD    SP of program interrupted by INT 28
  3080.  24h    DWORD    INT 24 of interrupted program
  3081.  28h  3 WORDs    DOS 3+ extended error info
  3082.  2Eh    BYTE    old BREAK setting
  3083.  2Fh    BYTE    old VERIFY setting
  3084.  30h    BYTE    were running MS WORD 4.0 before popup
  3085.  31h    BYTE    MS WORD 4.0 special popup flag
  3086.  32h    BYTE    enhanced keyboard call in use
  3087.  33h    BYTE    delay for MS WORD 4.0
  3088. 11 times (for INTs 08h,09h,13h,16h,1Ch,21h,28h,2Fh,1Bh,23h, and 24h):
  3089.     DWORD    old interrupt vector
  3090.     BYTE    interrupt number
  3091.     DWORD    new interrupt vector
  3092. ----------2F5500-----------------------------
  3093. INT 2F - Multiplex - DOS 5.0 COMMAND.COM INTERFACE
  3094.     AX = 5500h
  3095. Return: AX = 0000h
  3096.     DS:SI -> entry point table
  3097. Notes:    used to access the shareable portion of COMMAND.COM, which may have
  3098.       been moved into the HMA; only the primary COMMAND.COM retains this
  3099.       portion
  3100.     procedures called from a dispatcher in COMMAND's resident portion;
  3101.       most assume that the segment address of the resident portion is on
  3102.       the stack and are thus not of general use
  3103. ----------2F6400-----------------------------
  3104. INT 2F - Multiplex - SCRNSAV2.COM - INSTALLATION CHECK
  3105.     AX = 6400h
  3106. Return: AL = 00h not installed
  3107.          FFh installed
  3108. Note:    SCRNSAV2.COM is a screen saver for PS/2's with VGA by Alan Ballard
  3109. ----------2F7A00-----------------------------
  3110. INT 2F - Multiplex - Novell NetWare - LOW-LEVEL API (IPX) INSTALLATION CHECK
  3111.     AX = 7A00h
  3112. Return: AL = 00h not installed
  3113.        = FFh installed
  3114.         ES:DI -> FAR entry point for routines accessed exclusively
  3115.             through INT 7A in NetWare versions through 2.0a.  Call
  3116.             with same values as INT 7A
  3117. SeeAlso: INT 64"Novell",INT 7A"Novell"
  3118. ----------2F7A80-----------------------------
  3119. INT 2F - Multiplex - Novell NetWare shell 3.01d - ???
  3120.     AX = 7A80h
  3121. Return: nothing
  3122. Note:    apparently called on abnormal exit of the shell
  3123. ----------2F7A81-----------------------------
  3124. INT 2F - Multiplex - Novell NetWare shell 3.01d - ???
  3125.     AX = 7A81h
  3126.     CX:DX -> ??? in shell's CS (may be callback address or data structure)
  3127. Return: nothing???
  3128. ----------2F7A85-----------------------------
  3129. INT 2F - Multiplex - Novell NetWare shell 3.01 - BROADCAST INFORM
  3130.     AX = 7A85h
  3131.     CX = broadcast server number
  3132. Return: CX = 0000h if broadcast message handled by another program
  3133.     CX unchanged if broadcast not handled
  3134. ----------2F7AFE-----------------------------
  3135. INT 2F - Multiplex - Novell NetWare shell 3.01d - ???
  3136.     AX = 7AFEh
  3137. Return: AL = FFh ???
  3138.          other ???
  3139. ----------2F7AFFBX0001-----------------------
  3140. INT 2F - Multiplex - Novell NetWare shell 3.01d - ???
  3141.     AX = 7AFFh
  3142.     BX = 0001h
  3143.     CX = offset of ???
  3144.     DX = offset of ???
  3145. Return: CX unchanged if ???
  3146. ----------2F7F24-----------------------------
  3147. INT 2F - Multiplex - ???
  3148.     AX = 7F24h
  3149.     ???
  3150. Return: ???
  3151. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  3152. ----------2F7F26-----------------------------
  3153. INT 2F - Multiplex - ???
  3154.     AX = 7F26h
  3155.     ???
  3156. Return: ???
  3157. Note:    called by PC/370, an IBM 370 emulator by Donald S. Higgins
  3158. ----------2F8000-----------------------------
  3159. INT 2F - Multiplex - EASY-NET - INSTALLATION CHECK
  3160.     AX = 8000h
  3161. Return: AL = 00h not installed
  3162.          FFh installed
  3163. Note:    EASY-NET is a shareware two-machine serial-port network
  3164. ----------2F8200-----------------------------
  3165. INT 2F - Multiplex - RESPLAY - SAMPLE/PLAYBACK
  3166.     AX = 8200h
  3167.     DX:DI -> start of sample space
  3168.     CX:BX = length in bytes
  3169. Return: AX = status
  3170.         1000h successful
  3171.         2000h not initialized (see AX=8210h)
  3172.         other RESPLAY not installed
  3173. Note:    RESPLAY is a freeware sound sampling/playback utility by Mark J. Cox
  3174. SeeAlso: AX=8201h,AX=8210h
  3175. ----------2F8201-----------------------------
  3176. INT 2F - Multiplex - RESPLAY - INSTALLATION CHECK
  3177.     AX = 8201h
  3178. Return: AX = 7746h if installed
  3179. SeeAlso: AX=8202h
  3180. ----------2F8202-----------------------------
  3181. INT 2F - Multiplex - RESPLAY - UNINSTALL
  3182.     AX = 8202h
  3183. Return:    AX = status
  3184.         1000h successful
  3185. SeeAlso: AX=8201h
  3186. ----------2F8210-----------------------------
  3187. INT 2F - Multiplex - RESPLAY - INITIALIZE
  3188.     AX = 8210h
  3189.     BL = sound device
  3190.         00h printer port LPT1
  3191.         01h printer port LPT2
  3192.         02h prototype board at I/O address 0300h
  3193.         03h printer port (alternative LPT1)
  3194.         04h internal speaker
  3195.     BH = sample rate in multiples of 250 Hz (14h to A0h)
  3196.     CL = direction
  3197.         00h playback
  3198.         01h sample
  3199. Return: AX = status
  3200.         1000h successful
  3201.         2000h parameter out of range
  3202.         other RESPLAY not installed
  3203. SeeAlso: AX=8200h
  3204. ----------2F8900-----------------------------
  3205. INT 2F - Multiplex - WHOA!.COM - INSTALLATION CHECK
  3206.     AX = 8900h
  3207. Return: AL = 00h not installed
  3208.        = FFh installed
  3209. Note:    WHOA!.COM is a system slow-down utility by Brad D Crandall
  3210. SeeAlso: AX=8901h,AX=8902h
  3211. ----------2F8901-----------------------------
  3212. INT 2F - Multiplex - WHOA!.COM - UNINSTALL
  3213.     AX = 8901h
  3214. Return: AL = FDh successful
  3215.        = FEh error
  3216. Note:    WHOA!.COM is a system slow-down utility by Brad D Crandall
  3217. SeeAlso: AX=8900h
  3218. ----------2F8902-----------------------------
  3219. INT 2F - Multiplex - WHOA!.COM - SET DELAY COUNT
  3220.     AX = 8902h
  3221.     BX = delay count (larger values slow system down more)
  3222. Return: AL = FDh successful
  3223.        = FEh error
  3224. Note:    WHOA!.COM is a system slow-down utility by Brad D Crandall
  3225. SeeAlso: AX=8900h
  3226. ----------2F90-------------------------------
  3227. INT 2F - Multiplex - RAID - ???
  3228.     AH = 90h
  3229.     ???
  3230. Return: ???
  3231. Note:    RAID is a TSR utility program that resides mostly in EMS
  3232. ----------2F93-------------------------------
  3233. INT 2F - Multiplex - InnerMission v1.7+ - INSTALLATION CHECK
  3234.     AH = 93h
  3235.     BX = CX = AX
  3236. Return: AL = FFh if installed and BX=CX=AX on entry
  3237.         BX = segment of resident code
  3238.        = 01h if installed but BX or CX differ from AX
  3239. Note:    InnerMission is a shareware graphical screen blanker by Kevin Stokes
  3240. ----------2FA1-------------------------------
  3241. INT 2F - Multiplex - Ergo DOS extenders - INSTALLATION CHECK
  3242.     AH = A1h
  3243.     AL = which
  3244.         FEh OS/286,OS/386
  3245.         FFh HummingBoard DOS extender
  3246.     BX = 0081h
  3247.     ES:DI -> 16-byte buffer
  3248. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  3249. SeeAlso: AX=ED00h,AX=FBA1h,INT 15/AX=BF02h
  3250. ----------2FAA00-----------------------------
  3251. INT 2F - Multiplex - VIDCLOCK.COM - INSTALLATION CHECK
  3252.     AX = AA00h
  3253. Return: AL = 00h not installed
  3254.          FFh installed
  3255. Note:    VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III
  3256. ----------2FAC00-----------------------------
  3257. INT 2F - Multiplex - DOS 4.01+ GRAPHICS.COM - INSTALLATION CHECK
  3258.     AX = AC00h
  3259. Return: AX = FFFFh
  3260.     ES:DI -> ??? (graphics data?)
  3261. Note:    this installation check was moved here to avoid the conflict with the
  3262.       CDROM extensions that occurred in DOS 4.00
  3263. SeeAlso: AX=1500h"GRAPHICS"
  3264. ----------2FAD00-----------------------------
  3265. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK
  3266.     AX = AD00h
  3267. Return: AL = FFh if installed
  3268.         BX = ??? (0100h in MS-DOS 3.30, PCDOS 4.01)
  3269. Note:    DOS 5.0 DISPLAY.SYS chains to previous handler if AL is not one of the
  3270.       subfunctions listed here
  3271. ----------2FAD01-----------------------------
  3272. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - SET ???
  3273.     AX = AD01h
  3274.     BX = ???
  3275. Return: ???
  3276.     CF set on error
  3277. ----------2FAD02-----------------------------
  3278. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - GET ???
  3279.     AX = AD02h
  3280. Return: BX = ??? (value set with AX=AD01h)
  3281. ----------2FAD03-----------------------------
  3282. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - GET ???
  3283.     AX = AD03h
  3284.     ES:DI -> user buffer
  3285.     CX = size of buffer
  3286. Return: CF set if buffer too small
  3287.     CF clear if successful
  3288. ----------2FAD04-----------------------------
  3289. INT 2F - Multiplex - DOS 4.x only DISPLAY.SYS internal - ???
  3290.     AX = AD04h
  3291.     ???
  3292. Return: ???
  3293. ----------2FAD10-----------------------------
  3294. INT 2F - Multiplex - DOS 4+ DISPLAY.SYS internal - INSTALLATION CHECK???
  3295.     AX = AD10h
  3296.     ???
  3297. Return: AX = FFFFh
  3298.     BX = ??? (0100h in PCDOS 4.01)
  3299. ----------2FAD40-----------------------------
  3300. INT 2F - Multiplex - DOS 4.0 - ???
  3301.     AX = AD40h
  3302.     DX = ???
  3303.     ???
  3304. Return: ???
  3305. Note:    called by PCDOS 4.01 PRINT.COM
  3306. ----------2FAD80-----------------------------
  3307. INT 2F - Multiplex - DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK
  3308.     AX = AD80h
  3309. Return: AL = FFh if installed
  3310.         BX = ??? (0100h in MSDOS 3.30, PCDOS 4.01, and MSDOS 5.00)
  3311.         ES:DI -> internal data (see below)
  3312.  
  3313. Format of KEYB internal data:
  3314. Offset    Size    Description
  3315.  00h    DWORD    original INT 09
  3316.  04h    DWORD    original INT 2F
  3317.  08h  6 BYTEs    ???
  3318.  0Eh    WORD    flags
  3319.  10h    BYTE    ???
  3320.  11h    BYTE    ???
  3321.  12h  4 BYTEs    ???
  3322.  16h  2 BYTEs    country ID letters
  3323.  18h    WORD    current code page
  3324. ---DOS 3.3---
  3325.  1Ah    WORD    pointer to first item in list of code page tables???
  3326.  1Ch    WORD    pointer to ??? item in list of code page tables
  3327.  1Eh  2 BYTEs    ???
  3328.  20h    WORD    pointer to key translation data
  3329.  22h    WORD    pointer to last item in code page table list (see below)
  3330.  24h  9 BYTEs    ???
  3331. ---DOS 4.01---
  3332.  1Ah  2 BYTEs    ???
  3333.  1Ch    WORD    pointer to first item in list of code page tables???
  3334.  1Eh    WORD    pointer to ??? item in list of code page tables
  3335.  20h  2 BYTEs    ???
  3336.  22h    WORD    pointer to key translation data
  3337.  24h    WORD    pointer to last item in code page table list (see below)
  3338.  26h  9 BYTEs    ???
  3339.  
  3340. Format of code page table list entries:
  3341. Offset    Size    Description
  3342.  00h    WORD    pointer to next item, FFFFh = last
  3343.  02h    WORD    code page
  3344.  04h  2 BYTEs    ???
  3345.  
  3346. Format of translation data:
  3347. Offset    Size    Description
  3348.  00h    WORD    size of data in bytes, including this word
  3349.  02h N-2 BYTEs    ???
  3350. ----------2FAD81-----------------------------
  3351. INT 2F - Multiplex - DOS 3.3+ KEYB.COM internal - SET KEYBOARD CODE PAGE
  3352.     AX = AD81h
  3353.     BX = code page
  3354. Return: CF set on error
  3355.         AX = 0001h (code page not available)
  3356.     CF clear if successful
  3357. Note:    called by DISPLAY.SYS
  3358. SeeAlso: AX=AD82h
  3359. ----------2FAD82-----------------------------
  3360. INT 2F - Multiplex - DOS 3.3+ KEYB.COM internal - SET KEYBOARD MAPPING
  3361.     AX = AD82h
  3362.     BL = new state
  3363.         00h US keyboard (Control-Alt-F1)
  3364.         FFh foreign keyboard (Control-Alt-F2)
  3365. Return: CF set on error (BL not 00h or FFh)
  3366.     CF clear if successful
  3367. SeeAlso: AX=AD81h,AX=AD83h
  3368. ----------2FAD83-----------------------------
  3369. INT 2F - Multiplex - DOS 5.0 KEYB.COM internal - GET KEYBOARD MAPPING
  3370.     AX = AD83h
  3371. Return: BL = current state
  3372.         00h US keyboard
  3373.         FFh foreign keyboard
  3374. SeeAlso: AX=AD82h
  3375. ----------2FAE00DXFFFF-----------------------
  3376. INT 2F - Multiplex - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALL CHECK
  3377.     AX = AE00h
  3378.     DX = FFFFh
  3379.     DS:BX -> command line
  3380. Return: AL = FFh if this command is a TSR extension to COMMAND.COM
  3381.     AL = 00h if the command should be executed as usual
  3382. Notes:    This call provides a mechanism for TSRs to install permanent extensions
  3383.       to the command repertoire of COMMAND.COM.  It appears that
  3384.       COMMAND.COM makes this call before executing the current command
  3385.       line,    and does not execute it itself if the return is FFh.
  3386.     APPEND hooks this call, to allow subsequent APPEND commands to execute
  3387.       without re-running APPEND
  3388.     CH appears to be set to FFh on the first call and 00h on the second
  3389.  
  3390. Format of command line:
  3391. Offset    Size    Description
  3392.  00h    BYTE    max length of command line, as in INT 21/AH=0Ah
  3393.  01h    BYTE    count of bytes to follow
  3394.       N BYTEs    command line text, terminated by 0Dh
  3395. ----------2FAE01DXFFFF-----------------------
  3396. INT 2F - Multiplex - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE
  3397.     AX = AE01h
  3398.     DX = FFFFh
  3399.     DS:SI -> buffer
  3400. Return: buffer at DS:SI filled with a length byte followed by the uppercase
  3401.       internal command to execute (if length not 0)
  3402. Notes:    this call requests execution of the command which a previous call to
  3403.       AX=AE00h indicated was resident
  3404.     APPEND hooks this call
  3405.     if the buffer is filled with a nonempty string, COMMAND.COM will
  3406.       attempt to execute it as an internal command
  3407. ----------2FB000-----------------------------
  3408. INT 2F - Multiplex - DOS 3.3+ GRAFTABL.COM - INSTALLATION CHECK
  3409.     AX = B000h
  3410. Return: AL = 00h not installed, OK to install
  3411.        = 01h not installed, not OK to install
  3412.        = FFh installed
  3413. Note:    called by DISPLAY.SYS
  3414. SeeAlso: AX=B001h
  3415. ----------2FB001-----------------------------
  3416. INT 2F - Multiplex - DOS 3.3+ GRAFTABL.COM - GET GRAPHICS FONT TABLE
  3417.     AX = B001h
  3418.     DS:BX -> DWORD buffer for address of 8x8 font table
  3419. Return: buffer filled
  3420.     AL = FFh
  3421. Note:    PCDOS 3.30/4.01 set the font table offset to 0130h, MSDOS 3.30 to 0030h
  3422. SeeAlso: AX=B000h
  3423. ----------2FB400-----------------------------
  3424. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - INSTALLATION CHECK
  3425.     AX = B400h
  3426. Return: AL = FFh if installed
  3427. ----------2FB401-----------------------------
  3428. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - GET HOST BUFFER ADDRESS
  3429.     AX = B401h
  3430. Return: ES -> host screen buffer (PC ASCII format)
  3431.     ES unchanged if communications not started
  3432. ----------2FB402-----------------------------
  3433. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - ???
  3434.     AX = B402h
  3435.     BX = ???
  3436. Return: ???
  3437. ----------2FB403-----------------------------
  3438. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - ???
  3439.     AX = B403h
  3440.     ???
  3441. Return: ???
  3442. ----------2FB404-----------------------------
  3443. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - ???
  3444.     AX = B404h
  3445.     ???
  3446. Return: ???
  3447. ----------2FB405-----------------------------
  3448. INT 2F - Multiplex - IBM PC3270 EMUL PROG v3 - ???
  3449.     AX = B405h
  3450.     ???
  3451. Return: ???
  3452. ----------2FB700-----------------------------
  3453. INT 2F - Multiplex - APPEND - INSTALLATION CHECK
  3454.     AX = B700h
  3455. Return: AL = status
  3456.         00h not installed
  3457.         FFh installed
  3458. Note:    MSDOS 3.30 APPEND refuses to install itself when run inside TopView or
  3459.       a TopView-compatible environment
  3460. ----------2FB701-----------------------------
  3461. INT 2F - Multiplex - APPEND - ???
  3462.     AX = B701h
  3463.     ???
  3464. Return: ???
  3465. Note:    MSDOS 3.30 APPEND displays "Incorrect APPEND Version" and aborts caller
  3466. ----------2FB702-----------------------------
  3467. INT 2F - Multiplex - APPEND - VERSION CHECK
  3468.     AX = B702h
  3469. Return: AX = FFFFh if not DOS 4.0 APPEND (also if DOS 5.0 APPEND)
  3470.     AL = major version number
  3471.     AH = minor version number, otherwise
  3472. SeeAlso: AX=B710h
  3473. ----------2FB703-----------------------------
  3474. INT 2F - Multiplex - DOS 3.3, DOS 5.0 APPEND - HOOK INT 21
  3475.     AX = B703h
  3476.     ES:DI -> INT 21 handler APPEND should chain to
  3477. Return: ES:DI -> APPEND's INT 21 handler
  3478. Note:    each invocation of this function toggles a flag which APPEND uses to
  3479.       determine whether to chain to the user handler or the original
  3480.       INT 21
  3481. ----------2FB704-----------------------------
  3482. INT 2F - Multiplex - DOS 3.3+ APPEND - GET APPEND PATH
  3483.     AX = B704h
  3484. Return: ES:DI -> active APPEND path (128 bytes max)
  3485. ----------2FB706-----------------------------
  3486. INT 2F - Multiplex - DOS 4+ APPEND - GET APPEND FUNCTION STATE
  3487.     AX = B706h
  3488. Return: BX = APPEND state
  3489.         bit 0: set if APPEND enabled
  3490.         bits 1-12 reserved
  3491.         bit 13: set if /PATH flag active
  3492.         bit 14: set if /E flag active (environment var APPEND exists)
  3493.         bit 15: set if /X flag active
  3494. ----------2FB707-----------------------------
  3495. INT 2F - Multiplex - DOS 4+ APPEND - SET APPEND FUNCTION STATE
  3496.     AX = B707h
  3497.     BX = APPEND state bits (see AX=B706h)
  3498. ----------2FB710-----------------------------
  3499. INT 2F - Multiplex - DOS 3.3+ APPEND - GET VERSION INFO
  3500.     AX = B710h
  3501. Return: AX = ???
  3502.     BX = ??? (0000h in MSDOS 3.30)
  3503.     CX = ??? (0000h in MSDOS 3.30)
  3504.     DL = major version
  3505.     DH = minor version
  3506. SeeAlso: AX=B702h
  3507. ----------2FB711-----------------------------
  3508. INT 2F - Multiplex - DOS 4+ APPEND - SET RETURN FOUND NAME STATE
  3509.     AX = B711h
  3510. Note:    if the next INT 21h call (and ONLY the next) is function 3Dh, 43h, or
  3511.     6Ch (also 4B03h and 4Eh if /X active), the fully qualified filename is
  3512.     written over top of the filename passed to the INT 21h call.  The
  3513.     application must provide a sufficiently large buffer.  This state is
  3514.     reset after the next INT 21h call processed by APPEND.
  3515. BUG:    DOS 4.0 APPEND reportedly overwrites DS:DX instead of DS:SI for
  3516.       INT 21/AH=6Ch
  3517. SeeAlso: INT 21/AH=4Eh
  3518. ----------2FB800-----------------------------
  3519. INT 2F - Multiplex - network - INSTALLATION CHECK
  3520.     AX = B800h
  3521. Return: AL = status
  3522.         00h        not installed
  3523.         nonzero installed
  3524.           BX = installed component flags (test in this order!)
  3525.            bit 6   server
  3526.            bit 2   messenger
  3527.            bit 7   receiver
  3528.            bit 3   redirector
  3529. ----------2FB803-----------------------------
  3530. INT 2F - Multiplex - network - GET NETWORK EVENT POST HANDLER
  3531.     AX = B803h
  3532. Return: ES:BX -> event post handler (see AX=B804h)
  3533. SeeAlso: AX=B804h,AX=B903h
  3534. ----------2FB804-----------------------------
  3535. INT 2F - Multiplex - network - SET NETWORK EVENT POST HANDLER
  3536.     AX = B804h
  3537.     ES:BX -> new event post handler
  3538. Notes:    used in conjunction with AX=B803h to hook into the network event post
  3539.       routine
  3540.     The specified handler is called on any network event.  Two events are
  3541.       defined: message received and critical network error.
  3542. SeeAlso: AX=B803h,AX=B904h
  3543.  
  3544. Values post routine is called with:
  3545.     AX = 0000h single block message
  3546.         DS:SI -> ASCIZ originator name
  3547.         DS:DI -> ASCIZ destination name
  3548.         ES:BX -> text header (see below)
  3549.     AX = 0001h start multiple message block
  3550.         CX = block group ID
  3551.         DS:SI -> ASCIZ originator name
  3552.         DS:DI -> ASCIZ destination name
  3553.     AX = 0002h multiple block text
  3554.         CX = block group ID
  3555.         ES:BX -> text header (see below)
  3556.     AX = 0003h end multiple block message
  3557.         CX = block group ID
  3558.     AX = 0004h message aborted due to error
  3559.         CX = block group ID
  3560.     AX = 0101h server received badly formatted network request
  3561.         Return: AX = FFFFh (PC LAN will process error)
  3562.     AX = 0102h unexpected network error
  3563.         ES:BX -> NCB (see INT 5C)
  3564.     AX = 0103h server received INT 24 error
  3565.         other registers as for INT 24, except AH is in BH
  3566.         Return: as below, but only 0000h and FFFFh allowed
  3567. Return:    AX = response code
  3568.         0000h user post routine processed message
  3569.         0001h PC LAN will process message, but message window not displayed
  3570.         FFFFh PC LAN will process message
  3571.     
  3572. Format of text header:
  3573. Offset    Size    Description
  3574.  00h    WORD    length of text (maximum 512 bytes)
  3575.  02h  N BYTEs    text of message
  3576. Note:    all CRLF sequences in message text are replaced by 14h
  3577. ----------2FB807-----------------------------
  3578. INT 2F - Multiplex - Network - GET NetBIOS NAME NUMBER OF MACHINE NAME
  3579.     AX = B807h
  3580. Return: CH = NetBIOS name number of the machine name
  3581. SeeAlso: INT 21/AX=5E00h
  3582. ----------2FB808-----------------------------
  3583. INT 2F - Multiplex - Network - ???
  3584.     AX = B808h
  3585.     ???
  3586. Return: ???
  3587. ----------2FB809-----------------------------
  3588. INT 2F - Multiplex - LANtastic Network - VERSION CHECK
  3589.     AX = B809h
  3590. Return: AH = major version
  3591.     AL = minor version
  3592. ----------2FB900-----------------------------
  3593. INT 2F - PC Network RECEIVER.COM - INSTALLATION CHECK
  3594.     AX = B900h
  3595. Return: AL = 00h if not installed
  3596.          FFh if installed
  3597. ----------2FB901-----------------------------
  3598. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM INT 2F HANDLER ADDRESS
  3599.     AX = B901h
  3600. Return: AL = ???
  3601.     ES:BX -> RECEIVER.COM INT 2F handler
  3602. Note:    allows more efficient execution by letting the caller bypass any other
  3603.       INT 2F handlers which have been added since RECEIVER.COM was
  3604.       installed
  3605. ----------2FB903-----------------------------
  3606. INT 2F - PC Network RECEIVER.COM - GET RECEIVER.COM POST ADDRESS
  3607.     AX = B903h
  3608. Return: ES:BX -> POST handler
  3609. SeeAlso: AX=B803h,AX=B904h
  3610. ----------2FB904-----------------------------
  3611. INT 2F - PC Network RECEIVER.COM - SET RECEIVER.COM POST ADDRESS
  3612.     AX = B904h
  3613.     ES:BX -> new POST handler
  3614. SeeAlso: AX=B804h,AX=B903h
  3615. ----------2FB905-----------------------------
  3616. INT 2F - PC Network RECEIVER.COM - GET FILENAME
  3617.     AX = B905h
  3618.     DS:BX -> 128-byte buffer for filename 1
  3619.     DS:DX -> 128-byte buffer for filename 2
  3620. Return: buffers filled from RECEIVER.COM internal buffers
  3621. Note:    use of filenames is unknown, but one appears to be for storing messages
  3622. SeeAlso: AX=B906h
  3623. ----------2FB906-----------------------------
  3624. INT 2F - PC Network RECEIVER.COM - SET FILENAME
  3625.     AX = B906h
  3626.     DS:BX -> 128-byte buffer for filename 1
  3627.     DS:DX -> 128-byte buffer for filename 2
  3628. Return: RECEIVER.COM internal buffers filled from user buffers
  3629. Note:    use of filenames is unknown, but one appears to be for storing messages
  3630. SeeAlso: AX=B905h
  3631. ----------2FB908-----------------------------
  3632. INT 2F - PC Network RECEIVER.COM - UNLINK KEYBOARD HANDLER
  3633.     AX = B908h
  3634.     ES:BX -> INT 09 handler RECEIVER should call after it finishes INT 09
  3635. Note:    this call replaces the address to which RECEIVER.COM chains on an
  3636.       INT 09 without preserving the original value.     This allows a prior
  3637.       handler to unlink, but does not allow a new handler to be added
  3638.       such that RECEIVER gets the INT 09 first.
  3639. ----------2FBC00-----------------------------
  3640. INT 2F - Multiplex - Windows 3.0, DOS 5.0 EGA.SYS - INSTALLATION CHECK
  3641.     AX = BC00h
  3642. Return: AL = 00h not installed, OK to install
  3643.        = 01h not installed, not OK to install
  3644.        = FFh installed
  3645.         BX = 5456h ("TV")
  3646. Note:    AH=BCh is the default value, which may be changed by a command line
  3647.       parameter to any value between 80h and FFh
  3648. SeeAlso: AX=BC06h,INT 10/AH=FAh"EGA"
  3649. ----------2FBC06-----------------------------
  3650. INT 2F - Multiplex - MS Windows 3.0, DOS 5.0 EGA.SYS - GET VERSION INFO
  3651.     AX = BC06h
  3652. Return: BX = 5456h ("TV")
  3653.     CH = major version
  3654.     CL = minor version
  3655.     DL = revision
  3656. SeeAlso: AX=BC00h,INT 10/AH=FAh"EGA"
  3657. ----------2FBF00-----------------------------
  3658. INT 2F - Multiplex - PC LAN PROGRAM REDIRIFS.EXE internal - INSTALLATION CHECK
  3659.     AX = BF00h
  3660. Return: AL = FFh if installed
  3661. ----------2FBF01-----------------------------
  3662. INT 2F - Multiplex - PC LAN PROGRAM REDIRIFS.EXE internal - ???
  3663.     AX = BF01h
  3664.     ???
  3665. Return: ???
  3666. ----------2FBF80-----------------------------
  3667. INT 2F - Multiplex - PC LAN PROG REDIR.SYS internal - SET REDIRIFS ENTRY POINT
  3668.     AX = BF80h
  3669.     ES:DI -> FAR entry point to IFS handler in REDIRIFS
  3670. Return: AL = FFh if installed
  3671.         ES:DI -> internal workspace
  3672. Note:    all future IFS calls to REDIR.SYS are passed to the ES:DI entry point
  3673. ----------2FC000-----------------------------
  3674. INT 2F - Multiplex - Novell ODI Link Support Layer (LSL.COM) - INSTALL CHECK
  3675.     AX = C000h
  3676. Return: AL = FFh
  3677.     ES:BX -> call entry point
  3678.     ES:SI -> signature string "LINKSUP$"
  3679. Note:    LSL.COM may use any multiplex number between C0h and FFh; it searches
  3680.       for itself in that range, and installs using the first free multiplex
  3681.       number in the range if not already loaded.
  3682. ----------2FC900BP0000-----------------------
  3683. INT 2F - Multiplex - ThunderByte??? - INSTALLATION CHECK
  3684.     AX = C900h
  3685.     BP = 0000h
  3686. Return: AL = FFh if installed
  3687.         BP >= 0014h
  3688. Note:    called by TBSCANX
  3689. SeeAlso: AX=C987h,AX=CA00h
  3690. ----------2FC987-----------------------------
  3691. INT 2F - Multiplex - ThunderByte??? - DISINFECT FILE???
  3692.     AX = C987h
  3693.     BX:DX -> filename
  3694.     BX:CX -> virus name
  3695. Return: AX = status
  3696.         0000h successful???
  3697. Note:    called by TBSCANX
  3698. SeeAlso: AX=CA00h
  3699. ----------2FCA00BX5442-----------------------
  3700. INT 2F - Multiplex - TBSCANX - INSTALLATION CHECK
  3701.     AX = CA00h
  3702.     BX = 5442h ('TB')
  3703. Return:    AL = 00h not installed
  3704.        = FFh installed
  3705.         BX = 7462h ('tb') if BX was 5442h on entry
  3706. Note:    TBSCANX is a resident virus scanning module by Frans Veldman.  Programs
  3707.       may perform virus checks on themselves, other program files, or their
  3708.       data files by invoking the TBSCANX API.
  3709. SeeAlso: AX=C900h
  3710. ----------2FCA01-----------------------------
  3711. INT 2F - Multiplex - TBSCANX - GET STATUS
  3712.     AX = CA01h
  3713. Return: AH = BCD version number (v2.2+)
  3714.        = CAh for versions before 2.2
  3715.     AL = state (00h = disabled, 01h = enabled)
  3716.     CX = number of signatures which will be searched
  3717. ---v2.0---
  3718.     BX = EMS handle, 0000h if not using EMS
  3719. ---v2.3+---
  3720.     BX = segment of swap area, 0000h if not swapped
  3721.     DX = EMS handle, FFFFh if not using EMS
  3722. SeeAlso: AX=CA02h
  3723. ----------2FCA02-----------------------------
  3724. INT 2F - Multiplex - TBSCANX - SET STATE
  3725.     AX = CA02h
  3726.     BL = new state (00h = disabled, 01h = enabled)
  3727. SeeAlso: AX=CA01h
  3728. ----------2FCA03-----------------------------
  3729. INT 2F - Multiplex - TBSCANX - SCAN BUFFER
  3730.     AX = CA03h
  3731.     CX = size of buffer
  3732.     DS:DX -> buffer containing data to scan
  3733. Return: CF clear if no virus signatures found
  3734.         BX,ES destroyed
  3735.     CF set if signature found
  3736.         ES:BX -> ASCIZ virus name (v2.3+)
  3737.         DS:DX -> ASCIZ virus name (v2.0)
  3738.     AX,CX,DX destroyed (v2.3+)
  3739.     all other registers except CS:IP and SS:SP destroyed (v2.0)
  3740. SeeAlso: AX=CA04h
  3741. ----------2FCA04-----------------------------
  3742. INT 2F - Multiplex - TBSCANX - SCAN FILE
  3743.     AX = CA04h
  3744.     DS:DX -> filename
  3745. Return: CF clear if no virus signatures found
  3746.         BX,ES destroyed
  3747.     CF set if signature found
  3748.         ES:BX -> ASCIZ virus name
  3749.     AX,CX,DX destroyed
  3750. Note:    this function requires at least 4K free memory
  3751. SeeAlso: AX=CA03h
  3752. ----------2FCB00-----------------------------
  3753. INT 2F - Multiplex - Communicating Applications Spec - INSTALLATION CHECK
  3754.     AX = CB00h
  3755. Return: AL = 00h not installed, OK to install
  3756.          01h not installed, not OK to install
  3757.          FFh installed
  3758. Note:    AH = CBh is the default identifier, but may be reconfigured
  3759. SeeAlso: AX=CB0Eh
  3760. ----------2FCB01-----------------------------
  3761. INT 2F - Multiplex - Communicating Applications Spec - SUBMIT A TASK
  3762.     AX = CB01h
  3763.     DS:DX -> ASCIZ name of task control file
  3764. Return: AX >= 0: event handle
  3765.        < 0: error code
  3766. Note:    files needed for an event must be kept until task is complete or error
  3767. SeeAlso: AX=CB0Bh,AX=CB15h
  3768.  
  3769. Error codes (AH = class, AL = subcode, value passed back is 2's complement):
  3770.   Class 00h    --- FAX warnings
  3771.     Subcode 00h    no error
  3772.         02h    bad scanline count
  3773.         03h    page sent with errors, could not retransmit
  3774.         04h    received data lost
  3775.         05h    invalid or missing logo file
  3776.         06h    filename does not match nonstandard format (NSF) header
  3777.         07h    file size does not match NSF header
  3778.   Class 01h    --- DOS warnings (data was sent)
  3779.     Subcode 01h    invalid function
  3780.         05h    access denied
  3781.         06h    invalid handle
  3782.         others    see INT 21/AH=59h
  3783.   Class 02h    --- fatal errors (data not sent)
  3784.     Subcode    00h    multiplex handler failed
  3785.         01h    unknown command
  3786.         02h    bad event handle
  3787.         03h    FIND NEXT attempted before FIND FIRST
  3788.         04h    no more events
  3789.         07h    invalid queue type
  3790.         08h    bad control file
  3791.         09h    communication board busy
  3792.         0Ah    invalid command parameter
  3793.         0Bh    can't uninstall resident code
  3794.         0Ch    file exists
  3795.         80h    unknown task type
  3796.         81h    bad phone number
  3797.         82h    bad .PCX file header
  3798.         83h    unexpected EOF
  3799.         84h    unexpected disconnect
  3800.         85h    too many dialing retries
  3801.         86h    no file specified for send
  3802.         87h    communication board timeout
  3803.         88h    received too many pages (>1023) of data
  3804.         89h    manual connect initiated too long ago
  3805.         8Ah    hardware command set error
  3806.         8Bh    bad NonStandard Format (NSF) header file
  3807.   Class 03h    --- fatal DOS errors
  3808.     Subcode 02h    file not found
  3809.         03h    path not found
  3810.         others    see INT 21/AH=59h
  3811.   Class 04h    --- FAX errors
  3812.     Subcode 01h    remote unit not Group 3 compatible
  3813.         02h    remote unit did not send capabilities
  3814.         03h    other FAX machine incompatible
  3815.         04h    other FAX incapable of file transfers
  3816.         05h    exceeded retrain or FAX resend limit
  3817.         06h    line noise or failure to agree on bit rate
  3818.         07h    remote disconnected after receiving data
  3819.         08h    no response from remote after sending data
  3820.         09h    remote's capabilities incompatible
  3821.         0Ah    no dial tone (v1.2+)
  3822.         0Bh    invalid response from remote unit after sending data
  3823.         0Dh    phone line dead or remote unit disconnected
  3824.         0Eh    timeout while waiting for secondary dial tone (v1.2+)
  3825.         11h    invalid command from remote after receiving data
  3826.         15h    tried to receive from incompatible hardware
  3827.         5Ch    received data overflowed input buffer
  3828.         5Dh    remote unexpectedly stopped sending data
  3829.         5Eh    other FAX machine jammed (no data sent)
  3830.         5Fh    remote took too long to send fax scan line
  3831.         63h    can't get through to remote unit
  3832.         64h    user canceled event
  3833.   Class 05h    --- application-specific (v1.2+)
  3834.   ---Intel FAXPOP.EXE
  3835.     Subcode 00h    tried to send while in graphics mode
  3836.         01h    insufficient disk space
  3837.         02h    internal buffer overflow
  3838.   Class 06h    --- CAS implementation-specific (v1.2+)
  3839. ----------2FCB02-----------------------------
  3840. INT 2F - Multiplex - Communicating Applications Spec - ABORT CURRENT EVENT
  3841.     AX = CB02h
  3842. Return: AX >= 0: event handle of aborted event
  3843.        < 0: error code (see AX=CB01h)
  3844. Note:    termination could take up to 30 seconds
  3845. SeeAlso: AX=CB08h,AX=CB10h
  3846. ----------2FCB05-----------------------------
  3847. INT 2F - Multiplex - Communicating Applications Spec - FIND FIRST QUEUE ENTRY
  3848.     AX = CB05h
  3849.     CX = status of events to find
  3850.         0000h successful completion
  3851.         0001h waiting to be processed
  3852.         0002h number has been dialed
  3853.         0003h connection established, sending
  3854.         0004h connection established, receiving
  3855.         0005h event aborted
  3856.         FFFFh find any event, regardless of status
  3857.         other negative values, match error code
  3858.     DH = direction
  3859.         00h chronological order, earliest to latest
  3860.         01h reverse chronological order, latest to earliest
  3861.     DL = queue to search
  3862.         00h task queue
  3863.         01h receive queue
  3864.         02h log queue
  3865. Return: AX = 0000h successful
  3866.         BX = event handle for found event
  3867.        < 0       error code (see AX=CB01h)
  3868. SeeAlso: AX=CB06h,AX=CB07h
  3869. ----------2FCB06-----------------------------
  3870. INT 2F - Multiplex - Communicating Applications Spec - FIND NEXT QUEUE ENTRY
  3871.     AX = CB06h
  3872.     DL = queue to search
  3873.         00h task queue
  3874.         01h receive queue
  3875.         02h log queue
  3876. Return: AX = 0000h successful
  3877.         BX = event handle for found event
  3878.        < 0       error code (see AX=CB01h)
  3879. Note:    direction of search is same as preceding FIND FIRST call
  3880. SeeAlso: AX=CB05h
  3881. ----------2FCB07-----------------------------
  3882. INT 2F - Multiplex - Communicating Applications Spec - OPEN FILE
  3883.     AX = CB07h
  3884.     BX = event handle from find (AL=05h,06h) or submit task (AL=01h)
  3885.     CX = receive file number (ignored for task queue and log queue)
  3886.         0000h  open receive control file
  3887.         N       open Nth received data file
  3888.     DL = queue
  3889.         00h task queue
  3890.         01h receive queue control file or received file, as given by CX
  3891.         02h log queue
  3892.         03h group file in task queue (v1.2+)
  3893.         04h group file in log queue (v1.2+)
  3894. Return: AX = 0000h successful
  3895.         BX = DOS file handle for requested file
  3896.        < 0       error code (see AX=CB01h)
  3897. Note:    the returned file handle has been opened in read-only mode and should
  3898.       be closed with INT 21/AH=3Eh after use
  3899. SeeAlso: AX=CB01h,AX=CB05h,AX=CB14h
  3900. ----------2FCB08-----------------------------
  3901. INT 2F - Multiplex - Communicating Applications Spec - DELETE FILE
  3902.     AX = CB08h
  3903.     BX = event handle
  3904.     CX = receive file number
  3905.         0000h delete ALL received files and receive control file
  3906.         N      delete Nth received file
  3907.     DL = queue
  3908.         00h delete control file in task queue and corresponding group file
  3909.         if it exists
  3910.         01h delete file in receive queue, as given by CX
  3911.         02h delete control file in log queue (individual deletions not
  3912.         recommended, to maintain integrity of log) and corresponding
  3913.         group file if it exists
  3914. Return: AX = 0000h successful
  3915.        < 0       error code (see AX=CB01h)\
  3916. SeeAlso: AX=CB02h,AX=CB09h
  3917. ----------2FCB09-----------------------------
  3918. INT 2F - Multiplex - Communicating Applications Spec - DELETE ALL FILES IN Q
  3919.     AX = CB09h
  3920.     DL = queue
  3921.         00h delete all control files in task queue, including all group
  3922.         files
  3923.         01h delete all files in receive queue
  3924.         02h delete all control files in log queue, including all group
  3925.         files
  3926. Return: AX = 0000h successful
  3927.        < 0       error code (see AX=CB01h)
  3928. SeeAlso: AX=CB08h
  3929. ----------2FCB0A-----------------------------
  3930. INT 2F - Multiplex - Communicating Applications Spec - GET EVENT DATE
  3931.     AX = CB0Ah
  3932.     BX = event handle
  3933.     DL = queue
  3934.         00h task queue
  3935.         01h receive queue
  3936.         02h log queue
  3937. Return: AX = 0000h successful
  3938.         CX = year
  3939.         DH = month
  3940.         DL = day
  3941.        < 0       error code (see AX=CB01h)
  3942. SeeAlso: AX=CB0Bh,AX=CB0Ch
  3943. ----------2FCB0B-----------------------------
  3944. INT 2F - Multiplex - Communicating Applications Spec - SET TASK DATE
  3945.     AX = CB0Bh
  3946.     BX = event handle (task event only)
  3947.     CX = year
  3948.     DH = month
  3949.     DL = day
  3950. Return: AX = 0000h successful
  3951.        < 0       error code (see AX=CB01h)
  3952. Note:    setting a task's date and time to before the current date and time
  3953.       causes it to execute immediately
  3954. SeeAlso: AX=CB01h,AX=CB0Ah,AX=CB0Dh
  3955. ----------2FCB0C-----------------------------
  3956. INT 2F - Multiplex - Communicating Applications Spec - GET EVENT TIME
  3957.     AX = CB0Ch
  3958.     BX = event handle
  3959.     DL = queue
  3960.         00h task queue
  3961.         01h receive queue
  3962.         02h log queue
  3963. Return: AX = 0000h successful
  3964.         CH = hour
  3965.         CL = minute
  3966.         DH = second
  3967.         DL = 00h
  3968.        < 0       error code (see AX=CB01h)
  3969. SeeAlso: AX=CB0Ah,AX=CB0Dh
  3970. ----------2FCB0D-----------------------------
  3971. INT 2F - Multiplex - Communicating Applications Spec - SET TASK TIME
  3972.     AX = CB0Dh
  3973.     BX = event handle (task events only)
  3974.     CH = hour
  3975.     CL = minute
  3976.     DH = second
  3977.     DL unused
  3978. Return: AX = 0000h successful
  3979.        < 0       error code (see AX=CB01h)
  3980. Note:    setting a task's date and time to before the current date and time
  3981.       causes it to execute immediately
  3982. SeeAlso: AX=CB0Bh,AX=CB0Ch,AX=CB10h
  3983. ----------2FCB0E-----------------------------
  3984. INT 2F - Multiplex - Communicating Applications Spec - GET EXTERNAL DATA BLOCK
  3985.     AX = CB0Eh
  3986.     DS:DX -> 256-byte buffer
  3987. Return: AX = 0000h successful
  3988.         buffer filled
  3989.        < 0       error code (see AX=CB01h)
  3990.  
  3991. Format of external data block:
  3992. Offset    Size    Description
  3993.  00h    BYTE    CAS major version
  3994.  01h    BYTE    CAS minor version
  3995.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  3996.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  3997.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  3998.  60h 32 BYTEs    ASCIZ default sender name
  3999.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  4000.  95h 107 BYTEs    reserved
  4001. ----------2FCB0F-----------------------------
  4002. INT 2F - Multiplex - Communicating Applications Spec - GET/SET AUTORECEIVE
  4003.     AX = CB0Fh
  4004.     DL = subfunction
  4005.         00h get current autoreceive state
  4006.         01h set autoreceive state
  4007.         DH = number of rings before answer, 00h = never
  4008. Return: AX = 0000h autoreceive disabled
  4009.        = N       number of rings before answer
  4010.        < 0       error code (see AX=CB01h)
  4011. ----------2FCB10-----------------------------
  4012. INT 2F - Multiplex - Communicating Applications Spec - GET CURRENT EVENT STATUS
  4013.     AX = CB10h
  4014.     DS:DX -> 512-byte buffer
  4015. Return: AX = 0000h successful
  4016.         BX = event handle of current event or negative error code if
  4017.             no current event
  4018.         buffer filled
  4019.        < 0       error code (see AX=CB01h)
  4020. SeeAlso: AX=CB02h,AX=CB0Dh
  4021.  
  4022. Format of status area:
  4023. Offset    Size    Description
  4024.  00h    BYTE    event type
  4025.         00h send
  4026.         01h receive
  4027.         02h polled send
  4028.         03h polled receive
  4029.         04h to 7Fh reserved
  4030.         FFh serious hardware error
  4031.  01h    BYTE    transfer type
  4032.         00h 200x200 dpi, FAX mode
  4033.         01h 100x200 dpi, FAX mode
  4034.         02h file transfer mode
  4035.         03h to 7Fh reserved
  4036.  02h    WORD    event status 
  4037.         0000h completed successfully
  4038.         0001h waiting
  4039.         0002h number dialed
  4040.         0003h connected, sending
  4041.         0004h connected, receiving
  4042.         0005h aborted
  4043.         0006h to 007Fh reserved
  4044.         0080h to 7FFFh application-specific events
  4045.         8000h to FFFFh error codes
  4046.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  4047.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  4048.  08h    WORD    number of files to transfer, max 7FFFh
  4049.  0Ah    WORD    offset of file transfer record
  4050.  0Ch 47 BYTEs    ASCIZ phone number to call
  4051.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  4052.  7Bh    BYTE    reserved (00h)
  4053.  7Ch    BYTE    connect time, seconds
  4054.  7Dh    BYTE    connect time, minutes
  4055.  7Eh    BYTE    connect time, hours
  4056.  7Fh    DWORD    total number of pages in all files
  4057.  83h    DWORD    pages already transmitted 
  4058.  87h    WORD    number of files already transmitted
  4059.  89h    BYTE    cover page flag
  4060.         00h don't transmit cover page
  4061.         01h transmit cover page
  4062.         02h to 7Fh reserved
  4063.  8Ah    WORD    total number of transmission errors
  4064.  8Ch 78 BYTEs    reserved (zeros)
  4065.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  4066.  EFH 32 BYTEs    ASCIZ destination name
  4067. 10Fh 32 BYTEs    ASCIZ sender name
  4068. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  4069. 17Fh 128 BYTEs    file transfer record for current event (see below)
  4070.  
  4071. Format of file transfer record:
  4072. Offset    Size    Description
  4073.  00h    BYTE    file type (ignored unless FAX)
  4074.         00h ASCII
  4075.         01h PCX
  4076.         02h DCX
  4077.         03h to 7Fh reserved
  4078.  01h    BYTE    text size for ASCII FAX file
  4079.         00h = 80 columns by 66 lines (11 inches)
  4080.         01h = 132 columns by 88 lines (11 inches)
  4081.         02h to 7Fh reserved
  4082.  02h    BYTE    status of file
  4083.         00h untouched
  4084.         01h opened
  4085.         02h moved
  4086.         03h deleted
  4087.         04h not yet received
  4088.         05h to 7Fh reserved
  4089.  03h    DWORD    bytes already transmitted
  4090.  07h    DWORD    file size in bytes
  4091.  0Bh    WORD    pages alread transmitted
  4092.  0Dh    WORD    number of pages in file
  4093.  0Fh 80 BYTEs    ASCIZ filename
  4094.  5Fh    BYTE    1/8 inch page length
  4095.         if page length below set to 01h through 7Fh, this value 
  4096.         specifies additional 1/8 inch increments to page length
  4097.  60h    BYTE    page length
  4098.         00h = 11 inches
  4099.         01h to 7Fh = page length is this number of inches plus value of
  4100.             1/8 inch field above
  4101.         80h to FEh reserved
  4102.         FFh = ASCII pages ending with formfeed
  4103.  61h 31 BYTEs    reserved (zeros)
  4104. ----------2FCB11-----------------------------
  4105. INT 2F - Multiplex - Communicating Applications Spec - GET QUEUE STATUS
  4106.     AX = CB11h
  4107.     DL = queue to get status of
  4108.         00h task queue
  4109.         01h receive queue
  4110.         02h log queue
  4111.         03h send events (v1.2+)
  4112.         04h receive events (v1.2+)
  4113. Return: AX >= 0     total number of changes made to queue, modulo 32768
  4114.         BX = number of control files currently in queue
  4115.         CX = number of received files (zero for task and log queues)
  4116.     AX < 0    error code (see AX=CB01h)
  4117. SeeAlso: AX=CB12h
  4118. ----------2FCB11DL03-------------------------
  4119. INT 2F - Multiplex - Communicating Apps Spec v1.2+ - GET NUM SEND EVENTS
  4120.     AX = CB11h
  4121.     DL = 03h
  4122. Return: AX = number of successful sends since resident manager started
  4123.     BX = number of unsuccessful sends, including warnings
  4124. SeeAlso: AX=CB11h/DL=04h
  4125. ----------2FCB11DL04-------------------------
  4126. INT 2F - Multiplex - Communicating Apps Spec v1.2+ - GET NUM RECEIVE EVENTS
  4127.     AX = CB11h
  4128.     DL = 04h
  4129. Return:    AX = number of received file events since resident manager started
  4130.     BX = number of received FAX events
  4131. SeeAlso: AX=CB11h/DL=03h
  4132. ----------2FCB12-----------------------------
  4133. INT 2F - Multiplex - Communicating Applications Spec - GET HARDWARE STATUS
  4134.     AX = CB12h
  4135.     DS:DX -> 128-byte status buffer
  4136. Return: AX = 0000h successful
  4137.         buffer filled with hardware-dependent status information
  4138.        < 0       error code (see AX=CB01h)
  4139. SeeAlso: AX=CB10h,AX=CB11h
  4140.  
  4141. Format of status buffer for Intel Connection CoProcessor:
  4142. Offset    Size    Description
  4143.  00h    BYTE    bit flags
  4144.         bit 7: hardware busy sending or receiving
  4145.         bit 6: last page of data
  4146.         bit 5: no data on current page
  4147.         bit 4: retransmit request for current page being transmitted
  4148.         bit 3: NSF mode active
  4149.         bits 2-0: reserved
  4150.  01h    BYTE    number of kilobytes of free buffer space
  4151.  02h    BYTE    page buffer status
  4152.         bit 7: Connection CoProcessor has documents to send
  4153.         bits 6-0: number of pages in buffer
  4154.  03h    BYTE    number of retries left for dialing number
  4155.  04h    BYTE    page number to retransmit
  4156.  05h    BYTE    communications status
  4157.         bit 7: originating call
  4158.         bit 6: FAX message to be sent
  4159.         bit 5: on line
  4160.         bit 4: ring detected and receive enabled
  4161.         bit 3: buffer dumped on receive
  4162.         bits 2-0: hardware sequence state
  4163.             000 idle
  4164.             001 dial
  4165.             010 answer
  4166.             011 transmit
  4167.             100 receive
  4168.             101 pre-message
  4169.             110 post-message
  4170.             111 disconnect
  4171.  06h    BYTE    baud rate
  4172.         bit 7: reserved
  4173.         bits 6-4: baud rate
  4174.             000 = 300 baud    (V.21 SDLC or HDLC mode)
  4175.             100 = 2400 baud (V.27 ter)
  4176.             101 = 4800 baud (V.27 ter)
  4177.             110 = 7200 baud (V.29)
  4178.             111 = 9600 baud (V.29)
  4179.         bits 3-0: reserved, should be 0110
  4180.  07h  3 BYTEs    reserved
  4181.  0Ah    BYTE    hardware status
  4182.         bit 7: modem option installed
  4183.         bit 6: Connection CoProcessor has control of DAA (not latched)
  4184.         bit 5: on line (not latched)
  4185.         bit 4: ring detected (not latched)
  4186.         bit 3: data in command buffer (not latched)
  4187.         bit 2: set if using DMA channel 1, clear if using DMA channel 3
  4188.         bit 1: line length compensation bit 1 set (not latched)
  4189.         bit 0: line length compensation bit 0 set (not latched)
  4190.  0Bh    BYTE    switch states
  4191.         bit 7: reserved
  4192.         bit 6: unused
  4193.         bit 5: spare switch open
  4194.         bit 4: FAX ADR1 switch open
  4195.         bit 3: FAX ADR0 switch open
  4196.         bit 2: alternate interrupt switch open
  4197.         bit 1: COM SEL 1 switch open
  4198.         bit 0: COM SEL 0 switch open
  4199.             Note: valid combinations of bits 0-2 are
  4200.                 000  COM2 IRQ3 IObase 2F8h
  4201.                 001  COM1 IRQ4 IObase 3F8h
  4202.                 010  COM4 IRQ3 IObase 2E8h
  4203.                 011  COM3 IRQ4 IObase 3E8h
  4204.                 110  COM4 IRQ2 IObase 2E8h
  4205.                 111  COM3 IRQ5 IObase 3E8h
  4206.  0Ch    BYTE    bit flags
  4207.         bit 7: reserved
  4208.         bit 6: auxiliary relay forced ON
  4209.         bit 5: modem select relay forced ON
  4210.         bit 4: offhook relay forced ON
  4211.         bit 3: 9600 bps enabled
  4212.         bit 2: 7200 bps enabled
  4213.         bit 1: 4800 bps enabled
  4214.         bit 0: 2400 bps enabled
  4215.  0Dh    BYTE    reserved
  4216.  0Eh    WORD    error count (only valid while busy, reset when idle)
  4217.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  4218.  14h    BYTE    'A' if Connection CoProcessor board present
  4219.  15h  9 BYTEs    reserved
  4220.  1Eh 21 BYTEs    ASCIZ CCITT identification
  4221.  33h 77 BYTEs    reserved
  4222.  
  4223. Format of status buffer for Intel SatisFAXtion board:
  4224. Offset    Size    Description
  4225.  00h    BYTE    connection status flags
  4226.         bit 7: busy in T.30 CCITT fax protocol
  4227.         bit 6: data on current page/file (only used for block xfers)
  4228.         bit 5: retransmission of last page requested
  4229.         bit 4: in file transfer mode
  4230.         bit 3: data in buffer
  4231.         bit 2: data buffer dumped on receive
  4232.         bit 1: 200x100 dpi resolution instead of 200x200 dpi
  4233.         bit 0: data modem in use, FAX image modem not available
  4234.  01h    BYTE    board state
  4235.         bit 7: reserved
  4236.         bit 6: handset jack active, data and FAX modems not available
  4237.         bits 5-3: current bit rate
  4238.             000     300 bps (V.21 HDLC)
  4239.             100 2400 bps (V.27 ter)
  4240.             101 4800 bps (V.27 ter)
  4241.             110 7200 bps (V.29)
  4242.             111 9600 bps (V.29)
  4243.         bits 2-0: T.30 CCITT protocol state
  4244.             000 idle
  4245.             001 dialing
  4246.             010 answering
  4247.             011 transmitting
  4248.             100 receiving
  4249.             101 pre-message
  4250.             110 post-message
  4251.             111 disconnect
  4252.  02h    BYTE    number of KB free in buffer
  4253.  03h    BYTE    number of pages or files in buffer
  4254.  04h    BYTE    number of redials remaining on current number
  4255.  05h    BYTE    FAX page number to retransmit
  4256.  06h    BYTE    current page/file in block transfer
  4257.  07h    BYTE    number of rings received (only if auto-answer enabled)
  4258.  08h    WORD    error count
  4259.  0Ah    DWORD    length of file being transferred
  4260.  0Eh  6 BYTEs    reserved
  4261.  14h    BYTE    'B' is SatisFAXtion board present
  4262.  15h 13 BYTEs    ASCIZ transfer agent name
  4263.  22h  5 BYTEs    ASCIZ transfer agent version number
  4264.  27h 13 BYTEs    ASCIZ resident loader name
  4265.  34h  5 BYTEs    ASCIZ resident loader version number
  4266.  39h 21 BYTEs    ASCIZ remote CSID
  4267.  4Eh 13 BYTEs    ASCIZ resident manager name
  4268.  5Bh  5 BYTEs    ASCIZ resident manager version number
  4269.  60h 32 BYTEs    reserved
  4270. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  4271.       by examining the byte at offset 14h
  4272. ----------2FCB13DL00-------------------------
  4273. INT 2F - Multiplex - Communicating Applications Spec - GET DIAGNOSTICS RESULTS
  4274.     AX = CB13h
  4275.     DL = 00h
  4276. Return: AX = 0040h in progress
  4277.        >= 0       passed
  4278.        < 0       hardware-dependent failure code (see below)
  4279. SeeAlso: AX=CB13h/DL=01h
  4280.  
  4281. Intel Connection CoProcessor failure codes:
  4282.     bit 3: 9600 bps FAX modem module failed
  4283.     bit 2: SDLC chip failed
  4284.     bit 1: RAM failed
  4285.     bit 0: ROM checksum failed
  4286.  
  4287. Intel SatisFAXtion failure codes:
  4288.     bit 1: 2400 bps data modem failed
  4289.     bit 0: 9600 bps FAX modem failed
  4290. ----------2FCB13DL01-------------------------
  4291. INT 2F - Multiplex - Communicating Applications Spec - START DIAGNOSTICS
  4292.     AX = CB13h
  4293.     DL = 01h
  4294. Return: AX = 0000h successfully started
  4295.        < 0       error code (see AX=CB01h)
  4296. SeeAlso: AX=CB13h/DL=00h
  4297. ----------2FCB14-----------------------------
  4298. INT 2F - Multiplex - Communicating Applications Spec - MOVE RECEIVED FILE
  4299.     AX = CB14h
  4300.     BX = event handle
  4301.     CX = receive file number
  4302.          0001h first received file
  4303.          N       Nth received file
  4304.     DS:DX -> ASCIZ string specifying new name for file (must not exist)
  4305. Return: AX = 0000h successful
  4306.        < 0       error code (see AX=CB01h)
  4307. ----------2FCB15-----------------------------
  4308. INT 2F - Multiplex - Communicating Applications Spec - SUBMIT FILE TO SEND
  4309.     AX = CB15h
  4310.     DS:DX -> variable-length data area (see below)
  4311. Return: AX >= 0    event handle
  4312.        < 0    error code (see AX=CB01h)
  4313. SeeAlso: AX=CB01h
  4314.  
  4315. Format of data area:
  4316. Offset    Size    Description
  4317.  00h    BYTE    transfer type
  4318.         00h = 200x200 dpi, fax mode
  4319.         01h = 100x200 dpi, fax mode
  4320.         02h = file transfer mode
  4321.         03h to 7Fh reserved
  4322.  01h    BYTE    text size
  4323.         00h = 80 columns
  4324.         01h = 132 columns
  4325.         02h to 7Fh reserved
  4326.  02h    WORD    time to send (DOS packed time format, see INT 21/AX=5700h)
  4327.  04h    WORD    date to send (DOS packed date format, see INT 21/AX=5700h)
  4328.  06h 32 BYTEs    ASCIZ destination name
  4329.  26h 80 BYTEs    ASCIZ name of file to send
  4330.  76h 47 BYTEs    ASCIZ phone number to dial
  4331.  A5h 64 BYTEs    ASCIZ application-specific tag string
  4332.  E5h    BYTE    reserved (00h)
  4333.  E6h    BYTE    cover page
  4334.         00h don't send cover page
  4335.         01h send cover page
  4336.         02h to 7Fh reserved
  4337.  E7h 23 BYTEs    reserved (zeros)
  4338.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  4339.         set to 01h)
  4340. ----------2FCB16BX1234-----------------------
  4341. INT 2F - Multiplex - Communicating Apps Spec v1.2+ - UNLOAD RESIDENT MANAGER
  4342.     AX = CB16h
  4343.     BX = 1234h
  4344.     CX = 5678h
  4345.     DX = 9ABCh
  4346. Return: AX = 0000h successful
  4347.        < 0       error code
  4348. SeeAlso: AX=CB00h
  4349. ----------2FCB17-----------------------------
  4350. INT 2F - Multiplex - Communicating Apps Spec v1.2+ - SET COVER PAGE STATUS
  4351.     AX = CB17h
  4352.     BX = event handle
  4353.     CL = cover page status
  4354.         00h not read
  4355.         01h read by user
  4356. Return: AX = 0000h successful
  4357.        < 0       error code
  4358. ----------2FCD00-----------------------------
  4359. INT 2F - Multiplex - Intel Image Processing Interface - INSTALLATION CHECK
  4360.     AX = CD00h
  4361. Return: AL = 00h not installed, OK to install
  4362.          01h not installed, not OK to install
  4363.          FFh installed
  4364. ----------2FCD00-----------------------------
  4365. INT 2F - Multiplex - SWELL.EXE - INSTALLATION CHECK
  4366.     AX = CD00h
  4367. Return: AX = 00FFh installed
  4368.         BH = major version
  4369.         BL = minor version
  4370. Note:    SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child
  4371.       process with INT 21/AH=4Bh
  4372. ----------2FCD01-----------------------------
  4373. INT 2F - Multiplex - Intel Image Processing Interface - SET DEVICE NAME
  4374.     AX = CD01h
  4375.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  4376. Return: AL = 00h successful
  4377.         CX:BX -> internal character device name
  4378.        = 80h error
  4379. ----------2FCD01-----------------------------
  4380. INT 2F - Multiplex - SWELL.EXE - SUSPEND ONCE
  4381.     AX = CD01h
  4382. Return: AX = 0000h
  4383. SeeAlso: AX=CD02h"SWELL"
  4384. ----------2FCD02-----------------------------
  4385. INT 2F - Multiplex - Intel Image Processing Interface - GET VERSION NUMBER
  4386.     AX = CD02h
  4387. Return: AL = 00h/01h successful
  4388.         BH = major version number (BCD)
  4389.         BL = minor version number (BCD)
  4390.        = 80h error
  4391. Note:    if return AL = 01h, the IPI supports network redirection
  4392. ----------2FCD02-----------------------------
  4393. INT 2F - Multiplex - SWELL.EXE - SUSPEND
  4394.     AX = CD02h
  4395. Return: AX = 0000h
  4396. SeeAlso: AX=CD03h"SWELL"
  4397. ----------2FCD03-----------------------------
  4398. INT 2F - Multiplex - Intel Image Processing Interface - SELECT SCAN LINE
  4399.     AX = CD03h
  4400.     BX = scan line
  4401.     CX = requested density in dots per inch (300, 600, or 1200)
  4402. Return: AL = 00h succesful
  4403.         CX = density at which scan line was mapped
  4404.         ES:DI -> start of scan line
  4405.     AL = 80h unsuccessful
  4406.        = 81h scan line out of range
  4407.        = 82h unsupported scan line density
  4408.        = 83h out of memory
  4409. ----------2FCD03-----------------------------
  4410. INT 2F - Multiplex - SWELL.EXE - ACTIVATE
  4411.     AX = CD03h
  4412. Return: AX = 0000h
  4413. SeeAlso: AX=CD02h"SWELL"
  4414. ----------2FCD04-----------------------------
  4415. INT 2F - Multiplex - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  4416.     AX = CD04h
  4417.     CX:BX -> structure (see below)
  4418. Return: AL = 00h successful
  4419.        = 80h unsuccessful
  4420.        = 81h scan line out of range
  4421.        = 82h unsupported scan line density
  4422.        = 83h out of memory
  4423.        = 84h unrecognized source
  4424.        = 85h initialization error
  4425.  
  4426. Format of structure:
  4427. Offset    Size    Description
  4428.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  4429.  02h    DWORD    pointer to image data
  4430.  06h    WORD    scan line on which to place
  4431.  08h    WORD    bit offset from start of scan line at which to place
  4432.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  4433.  0Ch    WORD    width in bits of data
  4434.  0Eh    WORD    source logical page number
  4435.  10h    WORD    source handle (only if source in expanded memory)
  4436.  12h    WORD    source offset (only if source in expanded memory)
  4437. ----------2FCD04-----------------------------
  4438. INT 2F - Multiplex - SWELL.EXE - TURN OFF VERBOSE MODE
  4439.     AX = CD04h
  4440. Return: AX = 0000h
  4441. SeeAlso: AX=CD05h"SWELL"
  4442. ----------2FCD05-----------------------------
  4443. INT 2F - Multiplex - Intel Image Processing Interface - PRINT PAGE
  4444.     AX = CD05h
  4445. Return: AL = 00h successful
  4446.        = 80h unsuccessful
  4447. Note:    page image is retained, so multiple calls will print multiple copies of
  4448.       the page
  4449. ----------2FCD05-----------------------------
  4450. INT 2F - Multiplex - SWELL.EXE - TURN ON VERBOSE MODE
  4451.     AX = CD05h
  4452. Return: AX = 0000h
  4453. SeeAlso: AX=CD04h"SWELL"
  4454. ----------2FCD06-----------------------------
  4455. INT 2F - Multiplex - Intel Image Processing Interface - CLEAR PAGE
  4456.     AX = CD06h
  4457. Return: AL = 00h successful
  4458.        = 80h unsuccessful
  4459. Note:    palette is reset to default
  4460. ----------2FCD06-----------------------------
  4461. INT 2F - Multiplex - SWELL.EXE - UNINSTALL
  4462.     AX = CD06h
  4463. Return: AX = 0000h uninstalled
  4464.        = 8002h programs still swapped, not uninstalled
  4465. ----------2FCD07-----------------------------
  4466. INT 2F - Multiplex - Intel Image Processing Interface - reserved
  4467.     AX = CD07h
  4468. ----------2FCD07-----------------------------
  4469. INT 2F - Multiplex - SWELL.EXE - GET INFO
  4470.     AX = CD07h
  4471.     ES:BX -> 32-byte buffer for info
  4472. Return: AX = 0000h successful
  4473.         ES:BX buffer filled
  4474.        = 8001h buffer wrong size
  4475.  
  4476. Format of info buffer:
  4477. Offset    Size    Description
  4478.  00h    WORD    20h  (total size of buffer)
  4479.  02h    BYTE    suspend-once mode active if nonzero
  4480.  03h    BYTE    00h active, 01h suspended
  4481.  04h    BYTE    00h quiet, 01h verbose
  4482.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  4483.  06h 26 BYTEs    unused???
  4484. ----------2FCD08-----------------------------
  4485. INT 2F - Multiplex - Intel Image Processing Interface - SCREEN IMAGE
  4486.     AX = CD08h
  4487.     CX:BX -> structure (see below)
  4488. Return: AL = 00h successful
  4489.        = 80h unsuccessful
  4490.        = 81h scan line out of range
  4491.        = 82h unsupported scan line density
  4492.        = 83h out of memory
  4493.        = 84h unrecognized source
  4494.        = 85h initialization error
  4495.  
  4496. Format of structure:
  4497. Offset    Size    Description
  4498.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  4499.  02h    DWORD    pointer to image data
  4500.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  4501.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  4502.  0Ah    WORD    left cropping (currently must be zero)
  4503.  0Ch    WORD    top cropping (currently must be zero)
  4504.  0Eh    WORD    width (currently must be 8000h)
  4505.  10h    WORD    height (currently must be 8000h)
  4506.  12h    WORD    horizontal size of image in 1200 dpi units
  4507.  14h    WORD    vertical size of image in 1200 dpi units
  4508.  16h    WORD    aspect ratio (currently reserved)
  4509.  18h    WORD    initialization flag (if 01h, initialization is performed)
  4510.  1Ah    WORD    pixels per line of source data
  4511.  1Ch    WORD    number of scan lines in source data
  4512.  1Eh    WORD    number of scan lines in packet
  4513.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  4514.  22h    WORD    pixels per byte (1,2,4, or 8)
  4515.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  4516.  26h    WORD    source page number (if in expanded memory)
  4517.  28h    WORD    source handle (if in expanded memory)
  4518.  2Ah    WORD    source offset (if in expanded memory)
  4519. ----------2FCD08-----------------------------
  4520. INT 2F - Multiplex - SWELL.EXE - UNUSED
  4521.     AX = CD08h
  4522. Return: AX = FFFFh (error)
  4523. ----------2FCD09-----------------------------
  4524. INT 2F - Multiplex - Intel Image Processing Interface - LOAD SCREEN
  4525.     AX = CD09h
  4526.     CX:BX -> structure (see below)
  4527. Return: AL = 00h successful
  4528.        = 80h unsuccessful
  4529. SeeAlso: AX=CD0Ah"Image Processing"
  4530.  
  4531. Format of structure:
  4532. Offset    Size    Description
  4533.  00h    BYTE    style
  4534.         44h ('D') diamond style
  4535.         4Ch ('L') line style
  4536.  01h    BYTE    reserved (00h)
  4537.  02h    WORD    frequency in lines per inch [sic]
  4538.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  4539.  04h    WORD    screen angle in degrees (-360 to 360)
  4540.         currently coerced to nearest of -45, 0, 45, or 90
  4541. ----------2FCD09-----------------------------
  4542. INT 2F - Multiplex - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  4543.     AX = CD09h
  4544. Return: AX = 0000h
  4545. SeeAlso: AX=CD0Ah"SWELL"
  4546. ----------2FCD0A-----------------------------
  4547. INT 2F - Multiplex - Intel Image Processing Interface - LOAD PALETTE
  4548.     AX = CD0Ah
  4549.     CX:BX -> palette structure (see below)
  4550. Return: AL = 00h successful
  4551.        = 80h unsuccessful
  4552. SeeAlso: AX=CD09h"Image Processing"
  4553.  
  4554. Format of palette structure:
  4555. Offset    Size    Description
  4556.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  4557.  01h    2**N    palette translation values, one per possible pixel value
  4558. ----------2FCD0A-----------------------------
  4559. INT 2F - Multiplex - SWELL.EXE - TURN ON "BORLAND SUPPORT"
  4560.     AX = CD0Ah
  4561. Return: AX = 0000h
  4562. SeeAlso: AX=CD09h"SWELL"
  4563. ----------2FD000-----------------------------
  4564. INT 2F - MDEBUG display driver - GET DRIVER STATUS
  4565.     AX = D000h
  4566. Return: CF set on error
  4567.         all other register must be unchanged)
  4568.     CF clear if successful
  4569.         AL = FFh
  4570.         AH = driver semaphor
  4571.         00h driver is not active
  4572.         01h driver is active
  4573.         BX = CS of the driver
  4574.         CX = driver version (CH = major, CL = minor, must be >= 0151h)
  4575.         DL = buffer semaphor
  4576.         00h driver is not pending
  4577.         01h driver is pending between functions 02h and 03h
  4578.         DH = show semaphor
  4579.         00h driver is not pending
  4580.         01h driver is pending between functions 04h and 05h
  4581. Notes:    MDEBUG is a shareware memory-resident debugger by Bernd Schemmer
  4582.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  4583.       FFh; the default is D0h for the display driver and D1h for the
  4584.       command driver (see INT 60/AH=00h"MDEBUG" for the actual multiplex
  4585.       numbers used)
  4586.     this function MUST be reentrant, as MDEBUG calls it after every popup
  4587.       before any other actions.  The handler should not change any
  4588.       registers if the display is in an unsupported mode or in a mode
  4589.       MDEBUG supports itself, e.g. a normal text mode like 80x25 or
  4590.       132x44 (v1.60+). In this case MDEBUG will not call any of the other
  4591.       functions for this popup session.
  4592.     MDEBUG will not call the other functions if the returned version is
  4593.       less than the actual version of MDEBUG.
  4594.     if the driver is reentrant, DL and DH should be 00h
  4595. SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h
  4596. ----------2FD001-----------------------------
  4597. INT 2F - MDEBUG display driver - INITIALIZE DRIVER
  4598.     AX = D001h
  4599. Return: CF set on error
  4600.     AL = driver semaphor
  4601.     AH = buffer semaphor
  4602. Notes:    MDEBUG calls this function after every succesful call of the function
  4603.       00h. The function should reset all internal data and the status of
  4604.       the driver. If this function returns an error, MDEBUG will not call
  4605.       the other functions in this popup session.
  4606.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  4607.       FFh; the default is D0h for the display driver and D1h for the
  4608.       command driver
  4609. SeeAlso: AX=D000h
  4610. ----------2FD002-----------------------------
  4611. INT 2F - MDEBUG display driver - SAVE GRAPHIC DATA
  4612.     AX = D002h
  4613. Return: CF set on error
  4614.     CF clear if successful
  4615.         display memory saved and display switched to one of the text modes
  4616.           02h, 03h or 07h.
  4617. Note:    MDEBUG calls this function only once every popup session before
  4618.       displaying its windows.
  4619. SeeAlso: AX=D000h,AX=D003h
  4620. ----------2FD003-----------------------------
  4621. INT 2F - MDEBUG display driver - RESTORE GRAPHIC DATA
  4622.     AX = D003h
  4623. Return: CF set on error
  4624.     CF clear if successful
  4625.         display restored to the mode it was in before calling AX=D002h and
  4626.           the display memory is restored
  4627. Note:    MDEBUG calls this function only once every popup session just before
  4628.      it exits to normal DOS.
  4629. SeeAlso: AX=D000h,AX=D002h
  4630. ----------2FD004-----------------------------
  4631. INT 2F - MDEBUG display driver - SHOW SAVED DATA
  4632.     AX = D004h
  4633. Return: CF set on error
  4634.     CF clear if successful
  4635.         display switched to mode it was in before calling AX=D002h and the
  4636.           display memory is restored
  4637. Note:    This function needn't save the display memory before changing it.
  4638. SeeAlso: AX=D000h,AX=D005h
  4639. ----------2FD005-----------------------------
  4640. INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN
  4641.     AX = D005h
  4642. Return: CF set on error
  4643.     CF clear if successful
  4644.         display restored to mode it was in before calling AX=D004h
  4645. Note:    This function needn't save or change the display memory
  4646. SeeAlso: AX=D000h,AX=D004h
  4647. ----------2FD0-------------------------------
  4648. INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS
  4649.     AH = D0h
  4650.     AL = 06h-7Fh
  4651. Note:    these functions are reserved for future use
  4652. ----------2FD0-------------------------------
  4653. INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS
  4654.     AH = D0h
  4655.     AL = 80h-FFh
  4656. Note:    these functions numbers are reserved for user defined features (e.g.
  4657.       communication between the transient und resident parts of the driver)
  4658. ----------2FD100-----------------------------
  4659. INT 2F - MDEBUG command driver - GET STATUS
  4660.     AX = D100h
  4661.     BX = version of MDEBUG (BH = major, BL = minor)
  4662.     CX = command driver counter
  4663. Return: DL = FFh
  4664.     BX = version number of the driver if it is less than the version in BX,
  4665.          else unchanged
  4666.     CX incremented
  4667. ---v1.60+---
  4668.     DS:SI -> MDEBUG identification table (see below)
  4669.     ES = segment of display memory used by MDEBUG
  4670.     DI = size of video mode used by MDEBUG
  4671.         (high byte = lines, low byte = columns)
  4672. Notes:    MDEBUG is a shareware memory-resident debugger by Bernd Schemmer
  4673.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  4674.       FFh; the default is D0h for the display driver and D1h for the
  4675.       command driver (see INT 60/AH=00h"MDEBUG" for the multiplex numbers
  4676.       actually used)
  4677.     this function must end with a far call to the old INT 2F handler after
  4678.       changing the registers
  4679.     this function MUST be reentrant
  4680.     if the version number returned in BX is less than 1.52, MDEBUG will
  4681.       not call any of the other functions during this popup session
  4682.     command drivers must also declare the following data at the given
  4683.       offsets in the code segment
  4684.         100h  3 BYTEs    JMP-command in .COM-files
  4685.         103h    BYTE    NOP-command (90h)
  4686.         104h 26 BYTEs    signature "Kommandotreiber für MDEBUG"
  4687.         11Eh 12 BYTEs    name of driver, e.g. "MDHISDRV.COM"
  4688.                 each driver must have a unique name
  4689.     MDEBUG will pass every key and command to the command driver(s) before
  4690.       checking for a valid internal command
  4691. SeeAlso: AX=D000h,AX=D101h
  4692.  
  4693. Format of MDEBUG identification table:
  4694. Offset  Size    Description
  4695.  -2     WORD    entry offset
  4696.  00h    WORD    CS of MDEBUG
  4697.  02h    DWORD   old INT 08h vector
  4698.  06h    DWORD   old INT 09h vector
  4699.  0Ah    DWORD   address INT 16h routine used by MDEBUG
  4700.  0Eh    BYTE    length of version string
  4701.  0Fh  N BYTEs   version string
  4702. ----------2FD101-----------------------------
  4703. INT 2F - MDEBUG command driver - INITIALIZE DRIVER
  4704.     AX = D101h
  4705.     CX = command driver counter
  4706. Return: DL = FFh if successful
  4707.         CX incremented
  4708.          else error: all registers unchanged
  4709. Note:    this function must end with a  far call to the old INT 2F handler after
  4710.       changing the registers
  4711.     this function must be reentrant
  4712. ----------2FD102-----------------------------
  4713. INT 2F - MDEBUG command driver - EXECUTE DEBUGGER COMMAND
  4714.     AX = D102h
  4715.     BL = first character of the debugger command
  4716.     BH = last character of the debugger command (or blank)
  4717.     DS:SI -> parameter for the debugger command as ASCIZ string
  4718.     DS:DI -> MDEBUG data structure (see below)
  4719. Return: AL = FFh
  4720.     CF set on error
  4721.         AH = error number
  4722.         01h syntax error
  4723.         02h first shell of the command.com is activ
  4724.         03h esc pressed
  4725.         04h break pressed
  4726.         05h DOS is busy
  4727.         06h command ended
  4728.         07h division by zero
  4729.         08h invalid display driver
  4730.         09h invalid command driver
  4731.         0Ah error 8 and 9
  4732.         0Bh unknown error
  4733.         0Ch new error
  4734.             DS:SI -> ASCIZ error message (max 30 characters)
  4735.            else unknown error
  4736.     CF clear if successful
  4737.         AH = return code
  4738.         00h continue processing the command line
  4739.         01h leave MDEBUG popup session
  4740.         02h leave MDEBUG popup session and automatically popup again
  4741.             if the InDOS flag is zero
  4742.         03h put new command line into the input buffer,
  4743.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  4744.         04h process new command line
  4745.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  4746.            else unknown status, but continue processing commmand line
  4747. Note:    this function must end with a far call to the old INT 2F handler (with
  4748.       registers unchanged) if the driver does not support the debugger
  4749.       command in BX.  Otherwise, the driver must not chain to the old
  4750.       INT 2F.
  4751.  
  4752. Format of MDEBUG data structure:
  4753. Offset    Size    Description
  4754.  00h    WORD    register SE
  4755.  02h    WORD    register OF
  4756.  04h    WORD    register FS
  4757.  06h    WORD    register FO
  4758.  08h    WORD    register AX
  4759.  0Ah    WORD    register BX
  4760.  0Ch    WORD    register CX
  4761.  0Eh    WORD    register DX
  4762.  10h    WORD    register SI
  4763.  12h    WORD    register DI
  4764.  14h    WORD    register DS
  4765.  16h    WORD    register ES
  4766.  18h    WORD    register BP
  4767.  1Ah    WORD    register SS
  4768.  1Ch    WORD    register SP
  4769.  1Eh    WORD    register FL (flags)
  4770.  20h    WORD    register R0
  4771.  22h    WORD    register R1
  4772.  24h    WORD    register R2
  4773.  26h    WORD    register R3
  4774.  28h    WORD    register R4
  4775.  2Ah    WORD    register R5
  4776.  2Ch    WORD    register R6
  4777.  2Eh    WORD    register R7
  4778.  30h    WORD    register R8
  4779.  32h    WORD    register CS, return-address
  4780.  34h    WORD    register IP, return-address
  4781.  36h    WORD    saved data for key <F6>, segment
  4782.  38h    WORD    saved data for key <F6>, offset
  4783.  3Ah 12 BYTEs    saved registers for the key <F8>
  4784.         (original register values at popup entry of MDEBUG)
  4785.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  4786.  46h 12 BYTEs    saved registers for the key <SHIFT-F8>
  4787.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  4788.  52h    DWORD    address of the DOS-invars-table
  4789.  56h    DWORD    address of the InDOS flag
  4790.  5Ah    WORD    offset of the register which is used for the segment of the
  4791.         first monitor window
  4792.  5Ch    WORD    offset of the register which is used for the offset of the
  4793.         first monitor window
  4794.  5Eh    WORD    name of the register which is used for the segment of the
  4795.         first monitor segment
  4796.  60h    WORD    name of the register which is used for the offset of the first
  4797.         monitor window     
  4798.  62h    WORD    pseudo register 1
  4799.  64h    WORD    pseudo register 2
  4800. ----------2FD103-----------------------------
  4801. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR
  4802.     AX = D103h
  4803.     BX = key code (like result of an interrupt 16h call)
  4804.     CX = 0 -> the cursor is in the ASCII column of the monitor
  4805.     CX = 1 -> the cursor is in one of the hex fields of the monitor
  4806.     DS:SI -> MDEBUG data structure (see AX=D102h)
  4807.     ES:DI -> actual byte in the monitor
  4808. Return: AL = FFh
  4809.     AH = return code
  4810.         00h key processed, read next key
  4811.         01h leave MDEBUG popup session
  4812.         02h leave MDEBUG popup session and automatically popup again if DOS
  4813.         is not busy
  4814.         03h signal an error (beep)
  4815.         04h driver has redefinded the key, proceed with the new key
  4816.         BX = new key code
  4817.         MDEBUG will not pass the new key to the command driver
  4818.        else treat like code 00h
  4819. Note:    this function must end with a far call to the old INT 2F handler (with
  4820.       registers unchanged) if the driver does not support the key in BX.
  4821.       Otherwise, the driver must not chain to the old INT 2F.
  4822. SeeAlso: AX=D104h
  4823. ----------2FD104-----------------------------
  4824. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE DEBUGGER
  4825.     AX = D104h
  4826.     DS:SI -> MDEBUG data structure (see AX=D102h)
  4827. Return: AL = FFh
  4828.     AH = return code
  4829.         00h key processed, read next key
  4830.         01h leave MDEBUG popup session
  4831.         02h leave MDEBUG popup session and automactically popup again if
  4832.         DOS is not busy
  4833.         03h signal an error (beep)
  4834.         04h driver has redefinded the key, proceed with the new key
  4835.         BX = new key code
  4836.         MDEBUG won't pass the new key to the command driver
  4837.         05h put new command line into the input buffer
  4838.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  4839.         06h process new command line
  4840.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  4841.        else treat like code 00h
  4842. Note:    this function must end with a far call to the old INT 2F handler if the
  4843.       driver does not support the key in BX.  Otherwise, the driver must
  4844.       not chain to the old INT 2F.
  4845. SeeAlso: AX=D103h
  4846. ----------2FD1-------------------------------
  4847. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  4848.     AH = D1h
  4849.     AL = 05h-0Ah
  4850. Note:    these functions are reserved for future use
  4851. ----------2FD110-----------------------------
  4852. INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F
  4853.     AX = D110h
  4854. Return: DL = 0FFh
  4855.     ES:BX -> next program in the chain for INT 2F
  4856.     CX = code segment of this driver
  4857.     DI = offset of driver identification table (see below) (v1.60+)
  4858. Notes:    only called by the transient part of the driver
  4859.     must be reentrant and the driver must not chain this function to the
  4860.       old INT 2F
  4861.  
  4862. Format of the driver identification table:
  4863. Offset  Size    Description
  4864.  00h  26 BYTEs   signature "Kommandotreiber für MDEBUG"
  4865.  27h  12 BYTEs   name of driver, e.g. "MDHISDRV.COM"
  4866.                  each driver must have a unique name
  4867. ----------2FD111-----------------------------
  4868. INT 2F - MDEBUG command driver - START DRIVER
  4869.     AX = D111h
  4870. Return: DL = 0FFh
  4871. Notes:    only called by the transient part of the driver to inform the resident
  4872.       part that it is installed
  4873.     the function must be reentrant and the driver mustn't chain this
  4874.       function to the old INT 2F
  4875. SeeAlso: AX=D101h,AX=D112h
  4876. ----------2FD112-----------------------------
  4877. INT 2F - MDEBUG command driver - END DRIVER
  4878.     AX = D112h
  4879. Return: DL = 0FFh
  4880. Notes:    only called by the transient part of the driver to inform the resident
  4881.       part that it will be released after this function
  4882.     the function must be reentrant and the driver mustn't chain this
  4883.       function to the old INT 2F
  4884. SeeAlso: AX=D101h,AX=D111h
  4885. ----------2FD1-------------------------------
  4886. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  4887.     AH = D1h
  4888.     AL = 13h-7Fh
  4889. Note:    these functions are reserved for future use
  4890. ----------2FD1-------------------------------
  4891. INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS
  4892.     AH = D1h
  4893.     AL = 80h-FFh
  4894. Note:    these functions are reserved for user defined features (e.g.
  4895.       communication between the transient und resident parts of the    driver)
  4896. ----------2FD200BX5144-----------------------
  4897. INT 2F - Multiplex - Quarterdeck QEMM/QRAM/MFT 5.0 - INSTALLATION CHECK
  4898.     AX = D200h
  4899.     BX = 5144h ("QD")
  4900.     CX = 4D45h ("ME")
  4901.     DX = 4D30h ("M0")
  4902. Return: AL = FFh installed      
  4903.     if BX,CX,DX registers were as specified on entry:
  4904.         BX = 4D45h ("ME")
  4905.         CX = 4D44h ("MD")
  4906.         DX = 5652h ("VR")
  4907. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  4908.       through FFh, then C0h through D1h
  4909.     QEMM and QRAM both responded the same
  4910.     for AL <> 0, if the BX/CX/DX values don't match a the identifier of a
  4911.       Quarterdeck product, it just chains to the previous INT 2F handler
  4912. ----------2FD201BX4849-----------------------
  4913. INT 2F - Multiplex - Quarterdeck QEMM/QRAM 5.0 - GET HIRAM MEMORY CHAIN
  4914.     AX = D201h
  4915.     BX = 4849h ("HI")
  4916.     CX = 5241h ("RA")
  4917.     DX = 4D30h ("M0")
  4918. Return: BX = 4F4Bh ("OK")
  4919.     CX = segment of start of HIRAM chain
  4920.     DX = QEMM/QRAM code segment
  4921. Notes:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  4922.       through FFh, then C0h through D1h
  4923.     QEMM and QRAM both responded the same
  4924.     the HIRAM memory chain has the same format as the regular DOS 4.0
  4925.       memory chain (see INT 21/AH=52h), except that XMS Upper Memory Blocks
  4926.       have the block header program name field set to "UMB"
  4927. ----------2FD201BX5145-----------------------
  4928. INT 2F - Multiplex - Quarterdeck QEMM/QRAM 5.0 - INSTALLATION CHECK???
  4929.     AX = D201h
  4930.     BX = 5145h ("QE")
  4931.     CX = 4D4Dh ("MM")
  4932.     DX = 3432h ("42")
  4933. Return: BX = 4F4Bh ("OK")
  4934.     ES:DI -> entry point???
  4935. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  4936.       through FFh, then C0h through D1h
  4937.     QEMM and QRAM both responded the same
  4938. ----------2FD201BX5649-----------------------
  4939. INT 2F - Multiplex - Quarterdeck VIDRAM 5.0 - INSTALLATION CHECK
  4940.     AX = D201h
  4941.     BX = 5649h ("VI")
  4942.     CX = 4452h ("DR")
  4943.     DX = 414dh ("AM")
  4944. Return: BX = 4F4Bh ("OK")
  4945.     ES:DI -> VIDRAM entry point
  4946. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  4947.       through FFh, then C0h through D1h
  4948.  
  4949. Call VIDRAM entry point with:
  4950.     AH = 00h get status
  4951.         Return: AL = VIDRAM state (see below)
  4952.             BL = bit 0: ???
  4953.                  bits 1-7 not used
  4954.             BH = ???
  4955.             CL = current monitor (01h = mono, 80h = color)
  4956.             SI = current top of memory (paragraph)???
  4957.             DI = segment of ???
  4958.     AH = 01h setup
  4959.         AL = VIDRAM state (00h off, 01h no EGA graphics, 02h no graph)
  4960.         BL = bit 0: ???
  4961.              bits 1-7 not used
  4962.         BH = ???
  4963.         CL = monitor (01h = monochrome, 80h = color)
  4964.         SI = new top of memory (paragraph)???
  4965.     AH = 02h get ???
  4966.         Return: ES:DI -> ??? data
  4967. Return: CF set on error
  4968.     CF clear if successful
  4969. ----------2FD201BX4D41-----------------------
  4970. INT 2F - Multiplex - Quarterdeck MANIFEST 5.0 - INSTALLATION CHECK
  4971.     AX = D201h
  4972.     BX = 4D41h ("MA")
  4973.     CX = 4E49h ("NI")
  4974.     DX = 4645h ("FE")
  4975. Return: BX = 5354h ("ST")
  4976. Note:    QEMM/QRAM/VIDRAM/MANIFEST will search for a free AH value from D2h
  4977.       through FFh, then C0h through D1h
  4978. ----------2FD300BX4562-----------------------
  4979. INT 2F - Multiplex - TeleReplica - INSTALLATION CHECK
  4980.     AX = D300h
  4981.     BX = 4562h
  4982.     CX = 2745h
  4983.     DX = ??? (03F8h for v3.9)
  4984. Return: SI = segment of resident code
  4985.     AX = 251Dh
  4986.     BX = DF21h
  4987.     CX = F321h
  4988.     DX = ???
  4989. ----------2FD3CB-----------------------------
  4990. INT 2F - LapLink Quick Connect v6 - API
  4991.     AX = D3CBh
  4992.     CX = function
  4993.         0002h get ???
  4994.             Return: BX:AX -> ???
  4995.             CL = ???
  4996.             CH = ???
  4997.             DX = ???
  4998.             DI = COM1 I/O port???
  4999.             SI = COM2 I/O port???
  5000.         0003h initialization???
  5001.         0004h ???
  5002.         0005h initialization???
  5003.         0006h reset/clear ???
  5004.             Return: AX = 0000h
  5005.             ES:DI -> next byte after ??? cleared by this call
  5006.         0007h initialization???
  5007.         0008h uninstall
  5008.             Return: BX = status
  5009.                 0000h successful
  5010.                 FFFFh incomplete, stub remains in memory
  5011. Return: CX = 534Bh (except function 0002h)
  5012. ----------2FD44D-----------------------------
  5013. INT 2F - Multiplex - 4DOS.COM v2.1+
  5014.     AX = D44Dh
  5015.     BH = function
  5016.         00h installation check
  5017.         Return: AX = 44DDh
  5018.             BL = minor version number
  5019.             BH = major version number
  5020.             CX = PSP segment address for current invocation
  5021.             DL = 4DOS shell number (0 for the first (root) shell,
  5022.                  updated each time a new copy is loaded)
  5023.         01h (internal) terminate current copy of 4DOS
  5024.         02h ???
  5025.         DX = ???
  5026.         03h EXEC program
  5027.         CX:DX -> EXEC record
  5028.         FEh deallocate shell number (passed through to root shell)
  5029.         ???
  5030.         FFh allocate shell number (passed through to root shell)
  5031. Note:    bug in v3.00 will crash system if unrecognized value in BH
  5032. SeeAlso: INT 21/AX=4403h
  5033.  
  5034. Format of EXEC record:
  5035. Offset    Size    Description
  5036.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  5037.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  5038.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  5039. ----------2FD44E-----------------------------
  5040. INT 2F - Multiplex - 4DOS.COM v3.0+ - AWAITING USER INPUT
  5041.     AX = D44Eh
  5042. ---4DOS v3.01+---
  5043.     BX = 0000h 4DOS is ready to display prompt
  5044.        = 0001h 4DOS has displayed the prompt, about to accept user input
  5045. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  5046. Note:    v3.00 only makes the call corresponding to BX=0001h, does not set BX
  5047. ----------2FD701-----------------------------
  5048. INT 2F - Multiplex - BANYAN VINES v4+ - GET BANV INTERRUPT NUMBER
  5049.     AX = D701h
  5050. Return: AX = 0000h installed
  5051.         BX = interrupt number (60h to 66h)
  5052.        nonzero not present
  5053. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  5054.       necessary to examine the four bytes preceding the handlers for
  5055.       INT 60 through INT 66 for the string "BANV"
  5056. ----------2FDA55-----------------------------
  5057. INT 2F - Multiplex - TRAP.COM - INSTALLATION CHECK
  5058.     AX = DA55h
  5059.     DL = interrupt number
  5060.     DH = ???
  5061. Return: if installed
  5062.         AH = interrupt number
  5063.         AL = ???
  5064.         ES:BX -> ???
  5065. Notes:    TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel
  5066.     a separate copy of TRAP is loaded for each interrupt to be traced; thus
  5067.       the interrupt number is part of the installation check
  5068. ----------2FDC00-----------------------------
  5069. INT 2F - Multiplex - GOLD.COM - INSTALLATION CHECK
  5070.     AX = DC00h
  5071. Return: AL = 00h not installed
  5072.        = FFh installed
  5073. Note:    GOLD is a TSR by Bob Eager which makes the NumLock key return the code
  5074.       for F1; the purpose is to improve Kermit's VTxxx emulation
  5075. ----------2FDC01-----------------------------
  5076. INT 2F - Multiplex - GOLD.COM - GET STATE
  5077.     AX = DC01h
  5078. Return:    AL = status
  5079.         00h off
  5080.         01h on
  5081. SeeAlso: AX=DC00h,AX=DC02h
  5082. ----------2FDC02-----------------------------
  5083. INT 2F - Multiplex - GOLD.COM - SET STATE
  5084.     AX = DC02h
  5085.     DL = new state
  5086.         00h off
  5087.         01h on
  5088. Return: AL = 00h (OK)
  5089. SeeAlso: AX=DC01h
  5090. ----------2FDE00BX4445-----------------------
  5091. INT 2F - Multiplex - DESQview 2.26 External Dev Interface - INSTALLATION CHECK
  5092.     AX = DE00h
  5093.     BX = 4445h ("DE")
  5094.     CX = 5844h ("XD")
  5095.     DX = 4931h ("I1")
  5096. Return: AL = FFh if installed (even if other registers do not match)
  5097.     if BX,CX, and DX were as specified on entry,
  5098.         BX = 4845h ("HE")
  5099.         CX = 5245h ("RE")
  5100.         DX = 4456h ("DV")
  5101. Notes:    AH=DEh is the default XDI multiplex number, but may range from C0h-FFh
  5102.     programs should check for XDI starting at DEh to FFh, then C0h to DDh
  5103.     the XDI handler should not issue any DOS or BIOS calls, nor should it
  5104.       issue DESQview API calls other than those allowed from hardware ints
  5105. ----------2FDE01-----------------------------
  5106. INT 2F - Multiplex - DESQview 2.26 External Dev Itrface - DRIVER CUSTOM SUBFUNC
  5107.     AX = DE01h
  5108.     BX = driver ID
  5109.     other registers as needed by driver
  5110. Notes:    XDI drivers should pass this call through to previous handler if ID
  5111.       does not match
  5112.     DESQview never calls this function
  5113. ----------2FDE01BX7474-----------------------
  5114. INT 2F - Multiplex - DESQview 2.26 XDI - DVTXDI.COM
  5115.     AX = DE01h
  5116.     BX = 7474h
  5117.     CL = function
  5118.         00h installation check
  5119.         Return: AL = FFh
  5120.         01h get process handle
  5121.         DX = keys on Open Window menu (DL = first, DH = second)
  5122.         Return: AX = process handle or 0000h if not running
  5123.         02h (v1.3+) set ???
  5124.         DX = ???
  5125.         03h (v1.3+) set ???
  5126.         DX = ???
  5127. Return: BX = 4F4Bh ("OK")
  5128.     DL = ???
  5129. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  5130.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  5131. ----------2FDE01BXFFFE-----------------------
  5132. INT 2F - Multiplex - DESQview 2.26 XMS XDI - ???
  5133.     AX = DE01h
  5134.     BX = FFFEh
  5135.     CX = 4D47h
  5136.     DX = 0052h
  5137. Return: AL = FFh
  5138.     DX = 584Dh
  5139. ----------2FDE02-----------------------------
  5140. INT 2F - Multiplex - DESQview 2.26 External Device Interface - DV INIT COMPLETE
  5141.     AX = DE02h
  5142.     BX = mapping context of DESQview
  5143.     DX = handle of DESQview system task
  5144. SeeAlso: AX=DE03h
  5145. Note:    driver should pass this call to previous handler after doing its work
  5146. ----------2FDE03-----------------------------
  5147. INT 2F - Multiplex - DESQview 2.26 External Device Interface - DV TERMINATION
  5148.     AX = DE03h
  5149.     BX = mapping context of DESQview
  5150.     DX = handle of DESQview system task
  5151. SeeAlso: AX=DE02h
  5152. Notes:    driver should pass this call to previous handler before doing its work
  5153.     DESQview makes this call when it is exiting, but before unhooking any
  5154.       interrupt vectors
  5155. ----------2FDE04-----------------------------
  5156. INT 2F - Multiplex - DESQview 2.26 External Device Interface - ADD PROCESS
  5157.     AX = DE04h
  5158.     BX = mapping context of new process
  5159.     DX = handle of process
  5160. Return: nothing
  5161. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  5162.       (see below) from "common" memory to control access to XMS memory
  5163.     all DOS, BIOS, and DV API calls are valid in handler
  5164.     driver should pass this call to previous handler after processing it
  5165. SeeAlso: AX=DE05h
  5166.  
  5167. Format of XMS XDI structure:
  5168. Offset    Size    Description
  5169.  00h    DWORD    pointer to 10-byte record???
  5170.  04h    DWORD    pointer to next XMS XDI structure
  5171.  08h    WORD    mapping context
  5172.  0Ah    BYTE    ???
  5173.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  5174.         (FAR jump to next field)
  5175.  10h  6 BYTEs    FAR handler for XMS driver entry point
  5176.         (consists of a FAR CALL followed by RETF)
  5177. ----------2FDE05-----------------------------
  5178. INT 2F - Multiplex - DESQview 2.26 External Device Interface - REMOVE PROCESS
  5179.     AX = DE05h
  5180.     BX = mapping context of process
  5181.     DX = handle of last task in process
  5182. Return: nothing
  5183. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  5184.     driver should pass this call to previous handler before processing it
  5185.     all DOS, BIOS, and DV API calls except those generating a task switch
  5186.       are valid in handler
  5187. SeeAlso: AX=DE04h
  5188. ----------2FDE06-----------------------------
  5189. INT 2F - Multiplex - DESQview 2.26 XDI - CREATE TASK
  5190.     AX = DE06h
  5191.     BX = mapping context of process containing task
  5192.     DX = handle of new task
  5193. Notes:    driver should pass this call to previous handler after processing it
  5194.     all DOS, BIOS, and DV API calls are valid in handler
  5195. ----------2FDE07-----------------------------
  5196. INT 2F - Multiplex - DESQview 2.26 XDI - TERMINATE TASK
  5197.     AX = DE07h
  5198.     BX = mapping context of process containing task
  5199.     DX = handle of task
  5200. Notes:    driver should pass this call to previous handler before processing it
  5201.     all DOS, BIOS, and DV API calls except those generating a task switch
  5202.       are valid in handler
  5203. ----------2FDE08-----------------------------
  5204. INT 2F - Multiplex - DESQview 2.26 XDI - SAVE STATE
  5205.     AX = DE08h
  5206.     BX = mapping context of task being switched from
  5207.     DX = handle of task being switched from
  5208. Notes:    invoked prior to task swap, interrupts, etc
  5209.     driver should pass this call to previous handler after processing it
  5210. ----------2FDE09-----------------------------
  5211. INT 2F - Multiplex - DESQview 2.26 XDI - RESTORE STATE
  5212.     AX = DE09h
  5213.     BX = mapping context of task being switched to
  5214.     DX = handle of task being switched to
  5215. Notes:    state is restored except for interrupts
  5216.     driver should pass this call to previous handler before processing it
  5217. ----------2FDE0A-----------------------------
  5218. INT 2F - Multiplex - DESQview 2.26 XDI - CHANGE KEYBOARD FOCUS
  5219.     AX = DE0Ah
  5220.     BX = mapping context of task receiving focus
  5221.     DX = handle of running task
  5222. Notes:    driver should pass this call to previous handler before processing it
  5223.     this call often occurs inside a keyboard interrupt
  5224. ----------2FDE0B-----------------------------
  5225. INT 2F - Multiplex - DESQview 2.26 XDI - DVP PROCESSING COMPLETE
  5226.     AX = DE0Bh
  5227.     BX = mapping context of DESQview system task
  5228.     CX = number of system memory paragraphs required for the use of all
  5229.         XDI drivers (DV will add this to system memory in DVP buffer)
  5230.     DX = handle of DESQview system task
  5231.     SI = mapping context of new process if it starts
  5232.     ES:DI -> DVP buffer
  5233. Return: CX incremented as needed
  5234. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  5235.     driver should pass this call to previous handler before processing it
  5236. ----------2FDE0C-----------------------------
  5237. INT 2F - Multiplex - DESQview 2.26 XDI - SWAP OUT PROCESS
  5238.     AX = DE0Ch
  5239.     BX = mapping context of task being swapped out
  5240.     DX = handle of DESQview system task
  5241. Note:    driver should pass this call to previous handler after processing it
  5242. ----------2FDE0D-----------------------------
  5243. INT 2F - Multiplex - DESQview 2.26 XDI - SWAP IN PROCESS
  5244.     AX = DE0Dh
  5245.     BX = mapping context of process just swapped in
  5246.     DX = handle of DESQview system task
  5247. Note:    driver should pass this call to previous handler before processing it
  5248. ----------2FDE0E-----------------------------
  5249. INT 2F - Multiplex - DESQview 2.26 XDI - DVP START FAILED
  5250.     AX = DE0Eh
  5251.     BX = mapping context of DESQview system task
  5252.     DX = handle of DESQview system task
  5253.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  5254. Note:    driver should pass this call to previous handler after processing it
  5255. ----------2FDF--BX4448-----------------------
  5256. INT 2F - Multiplex - HyperDisk v4.20+ - INSTALLATION CHECK
  5257.     AH = DFh
  5258.     BX = 4448h ('DH')
  5259. Return: AL = FFh if installed
  5260.         CX = 5948h ('YH')
  5261.         BX:DX -> ??? in resident portion if BX=4448h on entry
  5262. Note:    HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  5263. SeeAlso: INT 13/AX=8EEDh
  5264. ----------2FE300-----------------------------
  5265. INT 2F - Multiplex - ANARKEY.COM - INSTALLATION CHECK
  5266.     AX = E300h
  5267. Return: AL = 00h not installed
  5268.          FEh if installed but suspended (v3.0+)
  5269.          FFh installed
  5270. Notes:    ANARKEY.COM is a commandline recall program by Steven Calwas
  5271.     E3h is the default function number, but can be set to any value from
  5272.       C0h to FFh
  5273. SeeAlso: AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h,AX=E307h
  5274. ----------2FE301-----------------------------
  5275. INT 2F - Multiplex - ANARKEY.COM v2+ - GET ???
  5276.     AX = E301h
  5277. Return: DX:BX -> ???
  5278. SeeAlso: AX=E300h
  5279.  
  5280. Format of returned data structure for ANARKEY v2.0:
  5281. Offset    Size    Description
  5282.  -7   7 BYTEs    signature ('ANARKEY')
  5283.  00h    WORD    ??? (I see 0001h in v2.0)
  5284.  02h    WORD    ??? (I see 0001h in v2.0)
  5285.  04h    WORD    ??? (I see 0 in v2.0)
  5286.  06h    WORD    PSP segment of next program loaded
  5287.  
  5288. Format of returned data structure for ANARKEY v3+:
  5289. Offset    Size    Description
  5290.  -1    BYTE    multiplex number
  5291.  00h    WORD    ??? (I see 0001h in v3.0-4.0)
  5292.  02h    WORD    ??? (I see 0001h in v3.0-4.0)
  5293.  04h    BYTE    ??? (I see 0 in v3.0-4.0)
  5294.  05h    WORD    PSP segment of next program loaded
  5295. ----------2FE302-----------------------------
  5296. INT 2F - Multiplex - ANARKEY.COM v3+ - ???
  5297.     AX = E302h
  5298.     BL = ???
  5299. Return: ???
  5300. SeeAlso: AX=E300h
  5301. ----------2FE303-----------------------------
  5302. INT 2F - Multiplex - ANARKEY.COM v3+ - ANARKMD API
  5303.     AX = E303h
  5304.     BL = function
  5305.         01h    toggle insert mode
  5306.         02h    display contents of history buffer
  5307.         03h    write history buffer to file
  5308.         ES:DX -> file name
  5309.         04h    clear history buffer
  5310.         05h    undefine all aliases
  5311.         06h    show aliases
  5312.         07h    list programs using Unix switchar
  5313.         08h    jump to bottom of history buffer    
  5314.         09h (v4.0) add string to history buffer
  5315.             ES:DX -> ASCIZ string
  5316.         0Ah (v4.0) ???
  5317.             ES:DX -> ???
  5318.         0Bh (v4.0) copy string to edit buffer for use as next input line
  5319.             ES:DX -> ASCIZ string
  5320.         0Ch (v4.0) ???
  5321.         0Dh (v4.0) copy ??? to ???
  5322.         0Eh (v4.0) ???
  5323.         0Fh (v4.0) ???
  5324.         10h (v4.0) set ??? flag
  5325.         11h (v4.0) display error message about running in EMS under Windows
  5326. Return: ???
  5327. SeeAlso: AX=E300h
  5328. ----------2FE304-----------------------------
  5329. INT 2F - Multiplex - ANARKEY.COM v2+ - ???
  5330.     AX = E304h
  5331.     BL = ???
  5332. Return: ???
  5333. SeeAlso: AX=E300h
  5334. ----------2FE305-----------------------------
  5335. INT 2F - Multiplex - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY
  5336.     AX = E305h
  5337.     BL = new state
  5338.         01h suspended
  5339.         00h enabled
  5340. SeeAlso: AX=E300h
  5341. ----------2FE306-----------------------------
  5342. INT 2F - Multiplex - ANARKEY.COM v4.0 - GET ???
  5343.     AX = E306h
  5344. Return: AX = ???
  5345. SeeAlso: AX=E300h
  5346. ----------2FE307-----------------------------
  5347. INT 2F - Multiplex - ANARKEY.COM v4.0 - GET ???
  5348.     AX = E307h
  5349. Return: AX = ???
  5350.     BL = ???
  5351. SeeAlso: AX=E300h
  5352. ----------2FED00-----------------------------
  5353. INT 2F - Multiplex - Phar Lap DOS EXTENDERS - INSTALLATION CHECK
  5354.     AX = ED00h
  5355.     BL = DOS extender
  5356.         01h 286dosx v1.3+ (Software Development Kit)
  5357.         02h 286dosx v1.3+ (Run-Time Kit)
  5358.         03h 386dosx v4.0+ (SDK)
  5359.         04h 386dosx v4.0+ (RTK)
  5360. Return: AL = status
  5361.         00h not installed
  5362.         FFh installed
  5363.             SI = 5048h ("PH")
  5364.         DI = 4152h ("AR")
  5365.         CH = major version number
  5366.         CL = minor version number
  5367.         DX = flags
  5368.             bit 0: running under DPMI
  5369.                 1: running under Phar Lap VMM
  5370. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h
  5371. ----------2FF100-----------------------------
  5372. INT 2F - Multiplex - DOS EXTENDER INSTALLATION CHECK
  5373.     AX = F100h
  5374. Return: AL = FFh if DOS extender present
  5375.         SI = 444Fh ("DO")
  5376.         DI = 5358h ("SX")
  5377. Note:    supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC
  5378. SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h,INT 15/AX=BF02h
  5379. ----------2FF700-----------------------------
  5380. INT 2F - Multiplex - AUTOPARK.COM - INSTALLATION CHECK
  5381.     AX = F700h
  5382. Return: AL = 00h not installed
  5383.          FFh installed
  5384. Note:    AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  5385. ----------2FF701-----------------------------
  5386. INT 2F - Multiplex - AUTOPARK.COM - SET PARKING DELAY
  5387.     AX = F701h
  5388.     BX:CX = 32-bit count of 55ms timer ticks
  5389. ----------2FFB-------------------------------
  5390. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  5391.     AH = FBh
  5392. ----------2FFB42-----------------------------
  5393. INT 2F - Multiplex - Borland DPMI LOADER (DPMILOAD.EXE)
  5394.     AX = FB42h
  5395.     BX = function
  5396.         0001h ???
  5397.             Return: AX = 0001h
  5398.             ES:BX -> ???
  5399.             CX = ???
  5400.             DX = ???
  5401.         0002h ???
  5402.             Call: ES,SI,DI
  5403.         Return: AX = ???
  5404.         0003h get free memory???
  5405.             Return: DX:AX = free memory???
  5406.         0004h ???
  5407.         Return:    CX = ???
  5408.         0005h ???
  5409.         Return: DX = ???
  5410.         0006h ???
  5411.             CX = ???
  5412.         DX = ???
  5413.         Return: DX = ???
  5414.         0007h ???
  5415.         CX = ???
  5416.         Return: ???
  5417.         0008h ???
  5418.             CX = ???
  5419.         DX = ???
  5420.         Return: DX = ???
  5421.         else calls INT 31/AX=0900h
  5422. ----------2FFBA1BX0081-----------------------
  5423. INT 2F - Multiplex - Borland DOS extender (TKERNEL) - INSTALLATION CHECK
  5424.     AX = FBA1h
  5425.     BX = 0081h
  5426.     ES:DI -> 16-byte buffer
  5427. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  5428. SeeAlso: AH=A1h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h 
  5429. ----------2FFBA1BX0082-----------------------
  5430. INT 2F - Multiplex - Borland DOS extender (TKERNEL) - GET ENTRY POINT
  5431.     AX = FBA1h
  5432.     BX = 0082h
  5433.     ES:DI -> response buffer (see below)
  5434. Return: ES:DI buffer filled
  5435. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  5436.  
  5437. Format of response buffer:
  5438. Offset    Size    Description
  5439.  00h  4 BYTEs    signature "IABH"
  5440.  04h    DWORD    pointer to FAR extender entry point
  5441.  
  5442. Call entry point with:
  5443.     AX = function number
  5444.         0000h to 0026h ???
  5445.         FFFFh ???
  5446.             BX:SI -> ???
  5447.         CX:DI -> ???
  5448.         other Return: AX = 0001h
  5449. ----------2FFBA1BX0084-----------------------
  5450. INT 2F - Multiplex - Borland DOS extender (TKERNEL) - UNINSTALL
  5451.     AX = FBA1h
  5452.     BX = 0084h
  5453.     ES:DI -> response buffer (see below)
  5454. Return: ES:DI buffer filled
  5455. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  5456.  
  5457. Format of response buffer:
  5458. Offset    Size    Description
  5459.  00h  4 BYTEs    signature "IABH"
  5460.  04h    WORD    success indicator
  5461.          0001h failed (INT 2F hooked by another program
  5462.         unchanged if successful
  5463. ----------2FFF00-----------------------------
  5464. INT 2F - Multiplex - Topware Network Operating System - INSTALLATION CHECK
  5465.     AX = FF00h
  5466. Return: AL = 00h not installed, OK to install
  5467.        = 01h not installed, not OK to install
  5468.        = FFh installed
  5469. ----------2FFF01-----------------------------
  5470. INT 2F - Multiplex - Topware Network Operating System - GET VERSION
  5471.     AX = FF01h
  5472. Return: AX = version
  5473. ----------30---------------------------------
  5474. INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls
  5475.    the CALL 5 entry point does a FAR jump to here
  5476. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  5477.       memory
  5478. SeeAlso: INT 21/AH=26h
  5479. ----------31---------------------------------
  5480. INT 31 - overwritten by CP/M jump instruction in INT 30
  5481. ----------310000-----------------------------
  5482. INT 31 - DOS Prot-Mode Interface 0.9+ - protected mode - ALLOCATE LDT DESCRPTRS
  5483.     AX = 0000h
  5484.     CX = number of descriptors to allocate
  5485. Return: CF clear if successful
  5486.         AX = base selector
  5487.     CF set on error
  5488.         AX = error code (DPMI 1.0+)
  5489.             0000h-7FFFh DOS error passed through by DPMI
  5490.         8001h unsupported function
  5491.         8002h object in wrong state for function
  5492.         8003h system integrity would be endangered
  5493.         8004h deadlock detected
  5494.         8005h pending serialization request cancelled
  5495.         8010h out of DPMI internal resources
  5496.             8011h descriptor unavailable
  5497.         8012h linear memory unavailable
  5498.         8013h physical memory unavailable
  5499.         8014h backing store unavailable
  5500.         8015h callback unavailable
  5501.         8016h handle unavailable
  5502.         8017h maximum lock count exceeded
  5503.         8018h shared memory already serialized exclusively by another
  5504.         8019h shared memory already serialized shared by another client
  5505.         8021h invalid value for numeric or flag parameter
  5506.         8022h invalid segment selector
  5507.         8023h invalid handle
  5508.         8024h invalid callback
  5509.         8025h invalid linear address
  5510.         8026h request not supported by hardware
  5511. Notes:    the base and limit of the returned descriptors will be 0, and the type
  5512.       will be "data"
  5513.     add the value returned by INT 31/AX=0003h to move to subsequent
  5514.       descriptors if multiple descriptors were allocated
  5515.     not supported by MS Windows 3.0 in Standard mode
  5516. SeeAlso: AX=0001h,AX=000Dh
  5517. ----------310001-----------------------------
  5518. INT 31 - DPMI 0.9+ - protected mode - FREE LDT DESCRIPTOR
  5519.     AX = 0001h
  5520.     BX = selector to free
  5521. Return: CF clear if successful
  5522.     CF set on error
  5523.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  5524. Notes:    only one descriptor is freed per call
  5525.     the program's initial CS, DS, and SS descriptors may be freed
  5526.     not supported by MS Windows 3.0 in Standard mode
  5527. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh
  5528. ----------310002-----------------------------
  5529. INT 31 - DPMI 0.9+ - protected mode - SEGMENT TO DESCRIPTOR
  5530.     AX = 0002h
  5531.     BX = real mode segment
  5532. Return: CF clear if successful
  5533.         AX = selector corresponding to real mode segment (64K limit)
  5534.     CF set on error
  5535.         AX = error code (DPMI 1.0+) (8011h) (see AX=0000h)
  5536. Notes:    multiple calls for the same real mode segment return the same selector
  5537.     the returned descriptor can never be modified or freed
  5538.     not supported by MS Windows 3.0 in Standard mode
  5539. ----------310003-----------------------------
  5540. INT 31 - DPMI 0.9+ - protected mode - GET NEXT SELECTOR INCREMENT VALUE
  5541.     AX = 0003h
  5542. Return: CF clear
  5543.         AX = value to add to get next sequential selector
  5544. Notes:    the increment will be a power of two
  5545.     not supported by MS Windows 3.0 in Standard mode
  5546. SeeAlso: AX=0000h
  5547. ----------310004-----------------------------
  5548. INT 31 - DPMI 0.9+ - protected mode - RESERVED FOR HISTORICAL REASONS
  5549.     AX = 0004h
  5550. ----------310005-----------------------------
  5551. INT 31 - DPMI 0.9+ - protected mode - RESERVED FOR HISTORICAL REASONS
  5552.     AX = 0005h
  5553. ----------310006-----------------------------
  5554. INT 31 - DPMI 0.9+ - protected mode - GET SEGMENT BASE ADDRESS
  5555.     AX = 0006h
  5556.     BX = selector
  5557. Return: CF clear if successful
  5558.         CX:DX = linear base address of segment
  5559.     CF set on error
  5560.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  5561. Note:    not supported by MS Windows 3.0 in Standard mode
  5562. SeeAlso: AX=0007h
  5563. ----------310007-----------------------------
  5564. INT 31 - DPMI 0.9+ - protected mode - SET SEGMENT BASE ADDRESS
  5565.     AX = 0007h
  5566.     BX = selector
  5567.     CX:DX = linear base address
  5568. Return: CF clear if successful
  5569.     CF set on error
  5570.         AX = error code (DPMI 1.0+) (8022h,8025h) (see AX=0000h)
  5571. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  5572.     only the low 24 bits of the address will be used by 16-bit DPMI
  5573.       implementations even on a 386 or higher
  5574.     DPMI 1.0+ automatically reloads any segment registers containing the
  5575.       selector being modified
  5576.     not supported by MS Windows 3.0 in Standard mode
  5577. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AH=E9h"OS/286"
  5578. ----------310008-----------------------------
  5579. INT 31 - DPMI 0.9+ - protected mode - SET SEGMENT LIMIT
  5580.     AX = 0008h
  5581.     BX = selector
  5582.     CX:DX = segment limit
  5583. Return: CF clear if successful
  5584.     CF set on error
  5585.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  5586. Notes:    CX must be zero for 16-bit DPMI implementations
  5587.     limits greater than 1MB must be page aligned (low 12 bits set)
  5588.     only modify descriptors allocated with INT 31/AX=0000h
  5589.     DPMI 1.0+ automatically reloads any segment registers containing the
  5590.       selector being modified
  5591.     not supported by MS Windows 3.0 in Standard mode
  5592. SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AH=E9h"OS/286"
  5593. ----------310009-----------------------------
  5594. INT 31 - DPMI 0.9+ - protected mode - SET DESCRIPTOR ACCESS RIGHTS
  5595.     AX = 0009h
  5596.     BX = selector
  5597.     CL = access rights/type byte
  5598.     CH = 80386 extended rights/type byte (32-bit DPMI implementations only)
  5599. Return: CF clear if successful
  5600.     CF set on error
  5601.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  5602. Notes:    if the Present bit is clear, CL bits 0-3 may have any value
  5603.     DPMI 1.0+ automatically reloads any segment registers containing the
  5604.       selector being modified
  5605.     not supported by MS Windows 3.0 in Standard mode
  5606. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h
  5607. ----------31000A-----------------------------
  5608. INT 31 - DPMI 0.9+ - protected mode - CREATE ALIAS DESCRIPTOR
  5609.     AX = 000Ah
  5610.     BX = selector
  5611. Return: CF clear if successful
  5612.         AX = new data selector
  5613.     CF set on error
  5614.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  5615. Notes:    fails if selector in BX is not a code segment or is invalid
  5616.     use INT 31/AX=0001h to free new selector
  5617.     future changes to the original selector will not be reflected in the
  5618.       returned alias selector
  5619.     not supported by MS Windows 3.0 in Standard mode
  5620. SeeAlso: AX=0001h
  5621. ----------31000B-----------------------------
  5622. INT 31 - DPMI 0.9+ - protected mode - GET DESCRIPTOR
  5623.     AX = 000Bh
  5624.     BX = LDT selector
  5625.     ES:(E)DI -> 8-byte buffer for copy of descriptor
  5626. Return: CF clear if successful
  5627.         buffer filled
  5628.     CF set on error
  5629.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  5630. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  5631.     not supported by MS Windows 3.0 in Standard mode
  5632. SeeAlso: AX=000Ch
  5633. ----------31000C-----------------------------
  5634. INT 31 - DPMI 0.9+ - protected mode - SET DESCRIPTOR
  5635.     AX = 000Ch
  5636.     BX = LDT selector
  5637.     ES:(E)DI -> 8-byte buffer containing descriptor
  5638. Return:    CF clear if successful
  5639.     CF set on error
  5640.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see AX=0000h)
  5641. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  5642.     only modify descriptors allocated with INT 31/AX=0000h
  5643.     DPMI 1.0+ automatically reloads any segment registers containing the
  5644.       selector being modified
  5645.     not supported by MS Windows 3.0 in Standard mode
  5646. SeeAlso: AX=000Bh
  5647. ----------31000D-----------------------------
  5648. INT 31 - DPMI 0.9+ - protected mode - ALLOCATE SPECIFIC LDT DESCRIPTOR
  5649.     AX = 000Dh
  5650.     BX = LDT selector
  5651. Return: CF clear if successful
  5652.         descriptor allocated
  5653.     CF set on error
  5654.         AX = error code (DPMI 1.0+) (8011h,8022h) (see AX=0000h)
  5655. Notes:    free descriptor with INT 31/AX=0001h
  5656.     the first 16 descriptors (04h-7Ch) are reserved for this function, but
  5657.       some may already be in use by other applications under DPMI 0.9;
  5658.       DPMI 1.0 guarantees 16 descriptors per client
  5659.     not supported by MS Windows 3.0 in Standard mode
  5660. SeeAlso: AX=0000h,AX=0001h
  5661. ----------31000E-----------------------------
  5662. INT 31 - DPMI 1.0+ - protected mode - GET MULTIPLE DESCRIPTORS
  5663.     AX = 000Eh
  5664.     CX = number of descriptors to copy
  5665.     ES:(E)DI -> descriptor buffer (see below)
  5666. Return: CF clear if successful
  5667.         descriptors copied
  5668.     CF set on error
  5669.         AX = error code (8022h) (see AX=0000h)
  5670.         CX = number of descriptors successfully copied
  5671. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  5672.     if the function fails, the first CX descriptors are valid; the
  5673.       remainder are not modified
  5674. SeeAlso: AX=000Bh,AX=000Fh
  5675.  
  5676. Format of descriptor buffer entry (one per descriptor to get):
  5677. Offset    Size    Description
  5678.  00h    WORD    selector (set by client)
  5679.  02h    QWORD    descriptor (set by host)
  5680. ----------31000F-----------------------------
  5681. INT 31 - DPMI 1.0+ - protected mode - SET MULTIPLE DESCRIPTORS
  5682.     AX = 000Fh
  5683.     CX = number of descriptors to copy
  5684.     ES:(E)DI -> descriptor buffer (see below)
  5685. Return: CF clear if successful
  5686.         descriptors copied
  5687.     CF set on error
  5688.         AX = error code (8021h,8022h,8025h) (see AX=0000h)
  5689.         CX = number of descriptors successfully copied
  5690. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  5691.     if the function fails, the first CX descriptors are valid; the
  5692.       remainder are not modified
  5693.     DPMI 1.0+ automatically reloads any segment registers containing a
  5694.       selector being modified
  5695. SeeAlso: AX=000Ch,AX=000Eh
  5696.  
  5697. Format of descriptor buffer entry (one per descriptor to set):
  5698. Offset    Size    Description
  5699.  00h    WORD    selector
  5700.  02h    QWORD    descriptor
  5701. ----------310100-----------------------------
  5702. INT 31 - DPMI 0.9+ - protected mode - ALLOCATE DOS MEMORY BLOCK
  5703.     AX = 0100h
  5704.     BX = number of paragraphs to allocate
  5705. Return: CF clear if successful
  5706.         AX = real mode segment of allocated block
  5707.         DX = first selector for allocated block
  5708.     CF set on error
  5709.         AX = DOS error code (07h,08h) (see INT 21/AH=59h)
  5710.              (DPMI 1.0+) DPMI error code (8011h) (see AX=0000h)
  5711.         BX = size (in paragraphs) of largest available block
  5712. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  5713.       if the caller is a 16-bit program
  5714.     never modify or deallocate returned descriptors
  5715.     not supported by MS Windows 3.0 in Standard mode
  5716. SeeAlso: AX=0101h,AX=0501h
  5717. ----------310101-----------------------------
  5718. INT 31 - DPMI 0.9+ - protected mode - FREE DOS MEMORY BLOCK
  5719.     AX = 0101h
  5720.     DX = selector of block
  5721. Return: CF set if successful
  5722.     CF set on error
  5723.         AX = DOS error code (07h,09h) (see INT 21/AH=59h)
  5724. Notes:    all descriptors allocated for the block are automatically freed
  5725.     DPMI 1.0+ automatically zeros any segment registers containing a
  5726.       selector freed by this function
  5727.     not supported by MS Windows 3.0 in Standard mode
  5728. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  5729. ----------310102-----------------------------
  5730. INT 31 - DPMI 0.9+ - protected mode - RESIZE DOS MEMORY BLOCK
  5731.     AX = 0102h
  5732.     BX = new block size in paragraphs
  5733.     DX = selector of block
  5734. Return: CF clear if successful
  5735.     CF set on error
  5736.         AX = DOS error code (07h,08h,09h) (see INT 21/AH=59h)
  5737.              (DPMI 1.0+) DPMI error code (8011h,8022h) (see AX=0000h)
  5738.         BX = maximum block size (in paragraphs) possible
  5739. Notes:    increasing the size of a block past a 64K boundary will fail if the
  5740.       next descriptor in the LDT is already in use
  5741.     shrinking a block past a 64K boundary will cause some selectors to be
  5742.       freed; DPMI 1.0+ automatically zeros any segment registers containing
  5743.       a selector freed by this function
  5744.     not supported by MS Windows 3.0 in Standard mode
  5745. SeeAlso: AX=0100h
  5746. ----------310200-----------------------------
  5747. INT 31 - DPMI 0.9+ - protected mode - GET REAL MODE INTERRUPT VECTOR
  5748.     AX = 0200h
  5749.     BL = interrupt number
  5750. Return: CF clear
  5751.     CX:DX = segment:offset of real mode interrupt handler
  5752. Note:    the DPMI implementation is required to support all 256 vectors
  5753. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h
  5754. ----------310201-----------------------------
  5755. INT 31 - DPMI 0.9+ - protected mode - SET REAL MODE INTERRUPT VECTOR
  5756.     AX = 0201h
  5757.     BL = interrupt number
  5758.     CX:DX = segment:offset of real mode handler
  5759. Return: CF clear
  5760. Note:    all memory that may be touched by a hardware interrupt handler must be
  5761.       locked down with INT 31/AX=0600h    
  5762. SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h
  5763. ----------310202-----------------------------
  5764. INT 31 - DPMI 0.9+ - protected mode - GET PROCESSOR EXCEPTION HANDLER VECTOR
  5765.     AX = 0202h
  5766.     BL = exception number (00h-1Fh)
  5767. Return:    CF clear if successful
  5768.         CX:(E)DX = selector:offset of handler
  5769.     CF set on error
  5770.         AX = error code (DPMI 1.0+) (8021h) (see AX=0000h)
  5771. Notes:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  5772.     DPMI 1.0+ supports this function only for backward compatibility; use
  5773.        AX=0210h or AX=0211h instead
  5774.     not supported by MS Windows 3.0 in Standard mode
  5775. SeeAlso: AX=0203h,AX=0210h,AX=0211h
  5776. ----------310203-----------------------------
  5777. INT 31 - DPMI 0.9+ - protected mode - SET PROCESSOR EXCEPTION HANDLER VECTOR
  5778.     AX = 0203h
  5779.     BL = exception number (00h-1Fh)
  5780.     CX:(E)DX = selector:offset of handler
  5781. Return: CF clear if successful
  5782.     CF set on error
  5783.         AX = error code (DPMI 1.0+) (8021h,8022h) (see AX=0000h)
  5784. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  5785.       stack frame on chaining to the next exception handler
  5786.     the handler should return using a FAR return
  5787.     all fault stack frames contain an error code, but it is only valid for
  5788.       exceptions 08h and 0Ah-0Eh
  5789.     handlers will only be called if the exception occurs in protected mode,
  5790.       and the DPMI host does not transparently handle the exception
  5791.     the handler may change certain values on the stack frame (see below)
  5792.     DPMI 1.0+ supports this function only for backward compatibility; use
  5793.        AX=0212h or AX=0213h instead
  5794.     not supported by MS Windows 3.0 in Standard mode
  5795. SeeAlso: AX=0202h,AX=0212h,AX=0213h
  5796.  
  5797. Format of stack frame for 16-bit programs: (offset from SS:SP)
  5798. Offset    Size    Description
  5799.  00h    DWORD    return CS:IP (do not change)
  5800.  04h    WORD    error code
  5801.  06h    DWORD    CS:IP of exception
  5802.  0Ah    WORD    flags
  5803.  0Ch    DWORD    SS:SP
  5804.  
  5805. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  5806. Offset    Size    Description
  5807.  00h    DWORD    return EIP (do not change)
  5808.  04h    WORD    return CS selector (do not change)
  5809.  06h    WORD    reserved (do not change)
  5810.  08h    DWORD    error code
  5811.  0Ch    DWORD    EIP of exception
  5812.  10h    WORD    CS selector of exception
  5813.  12h    WORD    reserved (do not change)
  5814.  14h    DWORD    EFLAGS
  5815.  18h    DWORD    ESP
  5816.  1Ch    WORD    SS
  5817.  1Eh    WORD    reserved (do not change)
  5818. ----------310204-----------------------------
  5819. INT 31 - DPMI 0.9+ - protected mode - GET PROTECTED MODE INTERRUPT VECTOR
  5820.     AX = 0204h
  5821.     BL = interrupt number
  5822. Return:    CF clear
  5823.     CX:(E)DX = selector:offset of handler
  5824. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  5825.     DPMI implementations are required to support all 256 vectors
  5826.     not supported by MS Windows 3.0 in Standard mode
  5827. SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h
  5828. ----------310205-----------------------------
  5829. INT 31 - DPMI 0.9+ - protected mode - SET PROTECTED MODE INTERRUPT VECTOR
  5830.     AX = 0205h
  5831.     BL = interrupt number
  5832.     CX:(E)DX = selector:offset of handler
  5833. Return: CF clear if successful
  5834.     CF set on error
  5835.         AX = error code (DPMI 1.0+) (8022h) (see AX=0000h)
  5836. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  5837.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  5838.       to the next handler
  5839.     DPMI implementations are required to support all 256 vectors
  5840.     hardware interrupts are reflected to the virtual machine's primary
  5841.       client, software interrupts to the current client
  5842.     not supported by MS Windows 3.0 in Standard mode
  5843. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h
  5844. ----------310210-----------------------------
  5845. INT 31 - DPMI 1.0+ - prot mode - GET PROTMODE EXT PROCESSOR EXCEPTION HANDLER
  5846.     AX = 0210h
  5847.     BL = exception number (00h-1Fh)
  5848. Return: CF clear if successful
  5849.         CX:(EDX) = selector:offset of exception handler
  5850.     CF set on error
  5851.         AX = error code (8021h) (see AX=0000h)
  5852. Note:    DPMI host reflects exception to current client's handler
  5853. SeeAlso: AX=0202h,AX=0211h,AX=0212h
  5854. ----------310211-----------------------------
  5855. INT 31 - DPMI 1.0+ - prot mode - GET REALMODE EXT PROCESSOR EXCEPTION HANDLER
  5856.     AX = 0211h
  5857.     BL = exception number (00h-1Fh)
  5858. Return: CF clear if successful
  5859.         CX:(EDX) = selector:offset of exception handler
  5860.     CF set on error
  5861.         AX = error code (8021h) (see AX=0000h)
  5862. Notes:    returns address of protected-mode handler for real-mode exception
  5863.     DPMI host performs a switch to protected mode, reflects the exception
  5864.       to the virtual machine's primary client, and returns to real mode
  5865.       on the handler's completion
  5866. SeeAlso: AX=0202h,AX=0210h,AX=0213h
  5867. ----------310212-----------------------------
  5868. INT 31 - DPMI 1.0+ - prot mode - SET PROTMODE EXT PROCESSOR EXCEPTION HANDLER
  5869.     AX = 0212h
  5870.     BL = exception or fault number (00h-1Fh)
  5871.     CX:(E)DX = exception handler selector:offset
  5872. Return: CF clear if successful
  5873.     CF set on error
  5874.         AX = error code (8021h,8022h) (see AX=0000h)
  5875. Note:    DPMI host sends exception to current client's handler
  5876. SeeAlso: AX=0203h,AX=0210h,AX=0213h
  5877. ----------310213-----------------------------
  5878. INT 31 - DPMI 1.0+ - prot mode - SET REALMODE EXT PROCESSOR EXCEPTION HANDLER
  5879.     AX = 0213h
  5880.     BL = exception or fault number (00h-1Fh)
  5881.     CX:(E)DX = exception handler selector:offset
  5882. Return: CF clear if successful
  5883.     CF set on error
  5884.         AX = error code (8021h,8022h) (see AX=0000h)
  5885. Notes:    specifies address of protected-mode handler for real-mode exception
  5886.     DPMI host performs a switch to protected mode, reflects the exception
  5887.       to the virtual machine's primary client, and returns to real mode
  5888.       on the handler's completion
  5889. SeeAlso: AX=0203h,AX=0211h,AX=0212h
  5890. ----------310300-----------------------------
  5891. INT 31 - DPMI 0.9+ - protected mode - SIMULATE REAL MODE INTERRUPT
  5892.     AX = 0300h
  5893.     BL = interrupt number
  5894.     BH = flags
  5895.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  5896.                reserved, must be 0 (DPMI 1.0+)
  5897.         others must be 0
  5898.     CX = number of words to copy from protected mode to real mode stack
  5899.     ES:(E)DI = selector:offset of real mode call structure (see below)
  5900. Return:    CF clear if successful
  5901.         real mode call structure modified (all fields except SS:SP, CS:IP
  5902.           filled with return values from real mode interrupt)
  5903.     CF set on error
  5904.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  5905.     protected mode stack unchanged
  5906. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  5907.     CS:IP in the real mode call structure is ignored for this call,
  5908.       instead, the indicated interrupt vector is used for the address
  5909.     the flags in the call structure are pushed on the real mode stack to
  5910.       form an interrupt stack frame, and the trace and interrupt flags are
  5911.       clear on entry to the handler
  5912.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  5913.     the real mode handler must return with the stack in the same state as
  5914.       it was on being called
  5915. SeeAlso: AX=0302h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286"
  5916.  
  5917. Format of real mode call structure:
  5918. Offset    Size    Description
  5919.  00h    DWORD    EDI
  5920.  04h    DWORD    ESI
  5921.  08h    DWORD    EBP
  5922.  0Ch    DWORD    reserved (00h)
  5923.  10h    DWORD    EBX
  5924.  14h    DWORD    EDX
  5925.  18h    DWORD    ECX
  5926.  1Ch    DWORD    EAX
  5927.  20h    WORD    flags
  5928.  22h    WORD    ES
  5929.  24h    WORD    DS
  5930.  26h    WORD    FS
  5931.  28h    WORD    GS
  5932.  2Ah    WORD    IP
  5933.  2Ch    WORD    CS
  5934.  2Eh    WORD    SP
  5935.  30h    WORD    SS
  5936. ----------310301-----------------------------
  5937. INT 31 - DPMI 0.9+ - prot mode - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME
  5938.     AX = 0301h
  5939.     BH = flags
  5940.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  5941.                reserved, must be 0 (DPMI 1.0+)
  5942.         others must be 0
  5943.     CX = number of words to copy from protected mode to real mode stack
  5944.     ES:DI / ES:EDI = selector:offset of real mode call structure
  5945.             (see INT 31/AX=0300h)
  5946. Return: CF clear if successful
  5947.         real mode call structure modified (all fields except SS:SP, CS:IP
  5948.           filled with return values from real mode interrupt)
  5949.     CF set on error
  5950.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  5951.     protected mode stack unchanged
  5952. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  5953.     the real mode procedure must exit with a FAR return
  5954.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  5955.     the real mode handler must return with the stack in the same state as
  5956.       it was on being called
  5957. SeeAlso: AX=0300h,AX=0302h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286"
  5958. ----------310302-----------------------------
  5959. INT 31 - DPMI 0.9+ - protected mode - CALL REAL MODE PROCEDURE WITH IRET FRAME
  5960.     AX = 0302h
  5961.     BH = flags
  5962.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  5963.                reserved, must be 0 (DPMI 1.0+)
  5964.         others must be 0
  5965.     CX = number of words to copy from protected mode to real mode stack
  5966.     ES:DI / ES:EDI = selector:offset of real mode call structure
  5967.             (see INT 31/AX=0300h)
  5968. Return:    CF clear if successful
  5969.         real mode call structure modified (all fields except SS:SP, CS:IP
  5970.           filled with return values from real mode interrupt)
  5971.     CF set on error
  5972.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see AX=0000h)
  5973.     protected mode stack unchanged
  5974. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  5975.     the flags in the call structure are pushed on the real mode stack to
  5976.       form an interrupt stack frame, and the trace and interrupt flags are
  5977.       clear on entry to the handler
  5978.     the real mode procedure must exit with an IRET
  5979.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  5980.     the real mode handler must return with the stack in the same state as
  5981.       it was on being called
  5982. SeeAlso: AX=0300h
  5983. ----------310303-----------------------------
  5984. INT 31 - DPMI 0.9+ - protected mode - ALLOCATE REAL MODE CALLBACK ADDRESS
  5985.     AX = 0303h
  5986.     DS:SI / DS:ESI = selector:offset of procedure to call
  5987.     ES:DI / ES:EDI = selector:offset of real mode call structure
  5988.             (see AX=0300h)
  5989. Return: CF clear if successful
  5990.         CX:DX = segment:offset of real mode call address
  5991.     CF set on error
  5992.         AX = error code (DPMI 1.0+) (8015h) (see AX=0000h)
  5993. Notes:    the real mode call structure is static, causing reentrancy problems;
  5994.       its contents are only valid at the time of a callback
  5995.     the called procedure must modify the real mode CS:IP before returning
  5996.     values are returned to real mode by modifying the real mode call struc
  5997.     DPMI hosts must provide at least 16 callbacks per client
  5998. SeeAlso: AX=0304h,AX=0C00h
  5999.  
  6000. Values callback procedure is called with:
  6001.     DS:SI / DS:ESI = selector:offset of real mode SS:SP
  6002.     ES:DI / ES:EDI = selector:offset of real mode call structure
  6003.     SS:SP / SS:ESP = locked protected mode API stack
  6004.     interrupts disabled
  6005. Return: (with IRET)
  6006.     ES:DI / ES:EDI = selector:offset of real mode call structure to restore
  6007. ----------310304-----------------------------
  6008. INT 31 - DPMI 0.9+ - protected mode - FREE REAL MODE CALLBACK ADDRESS
  6009.     AX = 0304h
  6010.     CX:DX = real mode callback address
  6011. Return: CF clear if successful
  6012.     CF set on error
  6013.         AX = error code (DPMI 1.0+) (8024h) (see AX=0000h)
  6014. SeeAlso: AX=0303h
  6015. ----------310305-----------------------------
  6016. INT 31 - DPMI 0.9+ - protected mode - GET STATE SAVE/RESTORE ADDRESSES
  6017.     AX = 0305h
  6018. Return: CF clear
  6019.     AX = size in bytes of state buffer
  6020.     BX:CX = real mode address of procedure to save/restore state
  6021.     SI:DI / SI:EDI = protected mode procedure to save/restore state
  6022. Notes:    the buffer size will be zero if it is not necessary to preserve state
  6023.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  6024.     this function is only needed if using the raw mode switch service
  6025. SeeAlso: AX=0306h
  6026.  
  6027. Values to call state-save procedures with:
  6028.     AL = direction
  6029.         00h save state
  6030.         01h restore state
  6031.     ES:DI / ES:EDI -> state buffer
  6032. Return: all registers preserved
  6033. ----------310306-----------------------------
  6034. INT 31 - DPMI 0.9+ - protected mode - GET RAW MODE SWITCH ADDRESSES
  6035.     AX = 0306h
  6036. Return:    CF clear
  6037.     BX:CX -> procedure to switch from real to protected mode
  6038.     SI:DI / SI:EDI -> procedure to switch from protected to real mode
  6039. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  6040.     the caller must save and restore the state of the task with AX=0305h
  6041.     not supported by MS Windows 3.0 in Standard mode
  6042. SeeAlso: AX=0305h
  6043.  
  6044. Values to JUMP at mode-switch procedures with:
  6045.     AX = new DS
  6046.     CX = new ES
  6047.     DX = new SS
  6048.     BX / EBX = new SP / ESP
  6049.     SI = new CS
  6050.     DI / EDI = new IP / EIP
  6051. Notes:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  6052.       DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h
  6053.     interrupts will stay disabled during the entire mode switch if they
  6054.       are disabled on entry to the mode-switch procedure
  6055. ----------310400-----------------------------
  6056. INT 31 - DPMI 0.9+ - protected mode - GET DPMI VERSION
  6057.     AX = 0400h
  6058. Return: CF clear
  6059.     AH = major version of DPMI spec supported
  6060.     AL = two-digit minor version of DPMI spec supported
  6061.     BX = flags
  6062.         bit 0: running under an 80386 (32-bit) implementation
  6063.         bit 1: processor returns to real mode for reflected interrupts
  6064.            instead of V86 mode
  6065.         bit 2: virtual memory supported
  6066.         bit 3: reserved (undefined)
  6067.         others reserved (zero)
  6068.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  6069.     DH = curr value of virtual master interrupt controller base interrupt
  6070.     DL = curr value of virtual slave interrupt controller base interrupt
  6071. SeeAlso: AX=0401h,INT 21/AX=250Ch
  6072. ----------310401-----------------------------
  6073. INT 31 - DPMI 1.0+ - protected mode - GET DPMI CAPABILITIES
  6074.     AX = 0401h
  6075.     ES:(E)DI -> 128-byte buffer (see below)
  6076. Return: CF clear if successful
  6077.         AX = capabilities
  6078.             bit 0: paged accessed/dirty supported (see AX=0506h,AX=0507h)
  6079.             1: exceptions restartability supported
  6080.             2: device mapping supported (see AX=0508h)
  6081.             3: conventional memory mapping supported (see AX=0509h)
  6082.             4: demand zero-fill supported
  6083.             5: write-protect client capability supported
  6084.             6: write-protect host capability supported
  6085.             7-15: reserved
  6086.         CX = reserved (00h)
  6087.         DX = reserved (00h)
  6088.         buffer filled
  6089.     CF set on error (DPMI 0.9 only)
  6090. SeeAlso: AX=0400h
  6091.  
  6092. Format of buffer:
  6093. Offset    Size    Description
  6094.  00h    BYTE    host major version number
  6095.  01h    BYTE    host minor version number
  6096.  02h 126 BYTEs    ASCIZ host vendor name
  6097. ----------310500-----------------------------
  6098. INT 31 - DPMI 0.9+ - protected mode - GET FREE MEMORY INFORMATION
  6099.     AX = 0500h
  6100.     ES:DI / ES:EDI -> buffer for memory information (see below)
  6101. Return: CF clear
  6102. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  6103.     this function must be considered advisory because other applications
  6104.       may affect the results at any time after the call
  6105.     fields not supported by the DPMI implementation are filled with
  6106.       FFFFFFFFh
  6107.     DPMI 1.0+ supports this function solely for backward compatibility; use
  6108.       AX=050Bh instead
  6109. SeeAlso: AX=0501h,AX=0604h
  6110.  
  6111. Format of memory information:
  6112. Offset    Size    Description
  6113.  00h    DWORD    largest available block in bytes
  6114.  04h    DWORD    maximum unlocked page allocation
  6115.  08h    DWORD    maximum locked page allocation
  6116.  0Ch    DWORD    total linear address space in pages
  6117.  10h    DWORD    total unlocked pages
  6118.  14h    DWORD    free pages
  6119.  18h    DWORD    total physical pages
  6120.  1Ch    DWORD    free linear address space in pages
  6121.  20h    DWORD    size of paging file/partition in pages
  6122.  24h 12 BYTEs    reserved
  6123. ----------310501-----------------------------
  6124. INT 31 - DPMI 0.9+ - protected mode - ALLOCATE MEMORY BLOCK
  6125.     AX = 0501h
  6126.     BX:CX = size in bytes
  6127. Return: CF clear if successful
  6128.         BX:CX = linear address of block
  6129.         SI:DI = memory block handle for resizing and freeing block
  6130.     CF set on error
  6131.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see AX=0000h)
  6132. Notes:    no selectors are allocated
  6133.     the memory block is allocated unlocked (can be locked with AX=0600h)
  6134.     allocations are often page granular (see AX=0604h)
  6135. SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h
  6136. ----------310502-----------------------------
  6137. INT 31 - DPMI 0.9+ - protected mode - FREE MEMORY BLOCK
  6138.     AX = 0502h
  6139.     SI:DI = handle of memory block
  6140. Return: CF clear if successful
  6141.     CF set on error
  6142.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  6143. Note:    any selectors allocated for the memory block must also be freed,
  6144.       preferably before freeing the memory block
  6145. SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h
  6146. ----------310503-----------------------------
  6147. INT 31 - DPMI 0.9+ - protected mode - RESIZE MEMORY BLOCK
  6148.     AX = 0503h
  6149.     BX:CX = new size in bytes (nonzero)
  6150.     SI:DI = handle of memory block
  6151. Return: CF clear if successful
  6152.         BX:CX = new linear address
  6153.         SI:DI = new handle of memory block
  6154.     CF set on error
  6155.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h)
  6156.             (see AX=0000h)
  6157. Notes:    any selectors pointing at the block must be updated
  6158.     the previous memory block handle becomes invalid
  6159.     an error is returned if the new size is 0
  6160. SeeAlso: AX=0102h,AX=0501h,AX=0505h
  6161. ----------310504-----------------------------
  6162. INT 31 - DPMI 1.0+ - protected mode - ALLOCATE LINEAR MEMORY BLOCK
  6163.     AX = 0504h
  6164.     EBX = page-aligned linear address of memory block (00000000h if any
  6165.         address is acceptable)
  6166.     ECX = size in bytes (nonzero)
  6167.     EDX = flags
  6168.         bit 0: set to create committed pages instead of uncommitted pages
  6169.         bits 1-31: reserved (0)
  6170. Return: CF clear if successful
  6171.         EBX = linear address of memory block
  6172.         ESI = memory block handle
  6173.     CF set on error
  6174.         AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see AX=0000h)
  6175. Note:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  6176. SeeAlso: AX=0501h,AX=0505h
  6177. ----------310505-----------------------------
  6178. INT 31 - DPMI 1.0+ - protected mode - RESIZE LINEAR MEMORY BLOCK
  6179.     AX = 0505h
  6180.     ESI = memory block handle
  6181.     ECX = new size in bytes (nonzero)
  6182.     EDX = flags
  6183.         bit 0: create committed pages rather than uncommitted pages
  6184.         bit 1: segment descriptor update required
  6185.         ES:EBX -> buffer containing array of WORDs with selectors
  6186.         EDI = number of selectors in array
  6187.         bits 2-31: reserved (0)
  6188. Return: CF clear if successful
  6189.         EBX = new linear base address
  6190.         ESI = new memory block handle
  6191.     CF set on error
  6192.         AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see AX=0000h)
  6193. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  6194.     the old memory block handle becomes invalid
  6195.     if EDX bit 1 set and the block's base address is changed, DPMI updates
  6196.       all descriptors for selectors in the update buffer which fall within
  6197.       the memory block
  6198. SeeAlso: AX=0503h,AX=0504h
  6199. ----------310506-----------------------------
  6200. INT 31 - DPMI 1.0+ - protected mode - GET PAGE ATTRIBUTES
  6201.     AX = 0506h
  6202.     ESI = memory block handle
  6203.     EBX = offset in memory block of first page
  6204.     ECX = number of pages
  6205.     ES:EDX -> array of WORDs to hold page attributes (see below)
  6206. Return: CF clear if successful
  6207.         buffer filled
  6208.     CF set on error
  6209.         AX = error code (8001h,8023h,8025h) (see AX=0000h)
  6210. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  6211.     if EBX is not page-aligned, it will be rounded down
  6212. SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h
  6213.  
  6214. Format of page attribute words:
  6215.  bits 0-2    page type
  6216.          000 uncommitted
  6217.         001 committed
  6218.         010 mapped (see AX=0508h,AX=0509h)
  6219.         other currently unused
  6220.  bit 3        page is read/write rather than read-only
  6221.  bit 4        accessed/dirty bits supplied in bits 5 and 6
  6222.  bit 5        page has been accessed (only valid if bit 4 set)
  6223.  bit 6        page has been written (only valid if bit 4 set)
  6224.  bits 7-15    reserved (0)
  6225. ----------310507-----------------------------
  6226. INT 31 - DPMI 1.0+ - protected mode - MODIFY PAGE ATTRIBUTES
  6227.     AX = 0507h
  6228.     ESI = memory block handle
  6229.     EBX = offset in memory block of first page
  6230.     ECX = number of pages
  6231.     ES:EDX -> array of WORDs with new page attributes (see AX=0506h)
  6232. Return: CF clear if successful
  6233.     CF set on error
  6234.         AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h)
  6235.             (see AX=0000h)
  6236.         ECX = number of pages which have been set
  6237. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  6238.     if EBX is not page-aligned, it will be rounded down
  6239. SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh
  6240. ----------310508-----------------------------
  6241. INT 31 - DPMI 1.0+ - protected mode - MAP DEVICE IN MEMORY BLOCK
  6242.     AX = 0508h
  6243.     ESI = memory block handle
  6244.     EBX = page-aligned offset within memory block of page(s) to be mapped
  6245.     ECX = number of pages to map
  6246.     EDX = page-aligned physical address of device
  6247. Return: CF clear if successful
  6248.     CF set on error
  6249.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  6250. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  6251.     support of this function is optional; hosts are also allowed to support
  6252.       the function for some devices but not others
  6253. SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h
  6254. ----------310509-----------------------------
  6255. INT 31 - DPMI 1.0+ - protected mode - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK
  6256.     AX = 0509h
  6257.     ESI = memory block handle
  6258.     EBX = page-aligned offset within memory block of page(s) to map
  6259.     ECX = number of pages to map
  6260.     EDX = page-aligned linear address of conventional (below 1M) memory
  6261. Return: CF clear if successful
  6262.     CF set on error
  6263.         AX = error code (8001h,8003h,8023h,8025h) (see AX=0000h)
  6264. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  6265.     support of this function is optional
  6266. SeeAlso: AX=0504h,AX=0508h,AX=0801h
  6267. ----------31050A-----------------------------
  6268. INT 31 - DPMI 1.0+ - protected mode - GET MEMORY BLOCK SIZE AND BASE
  6269.     AX = 050AH
  6270.     SI:DI = memory block handle
  6271. Return: CF clear if successful
  6272.         SI:DI = size in bytes
  6273.         BX:CX = base address
  6274.     CF set on error
  6275.         AX = error code (8023h) (see AX=0000h)
  6276. SeeAlso: AX=0501h,AX=0504h
  6277. ----------31050B-----------------------------
  6278. INT 31 - DPMI 1.0+ - protected mode - GET MEMORY INFORMATION
  6279.     AX = 050Bh
  6280.     ES:(E)DI -> 128-byte buffer for memory information (see below)
  6281. Return: CF clear if successful
  6282.     CF set on error (DPMI 0.9 only)
  6283. Note:    16-bit programs use ES:DI, 32-bit programs must use ES:EDI
  6284. SeeAlso: AX=0500h
  6285.  
  6286. Format of memory information:
  6287. Offset    Size    Description
  6288.  00h    DWORD    total allocated bytes of physical memory controlled by host
  6289.  04h    DWORD    total allocated bytes of virtual memory controlled by host
  6290.  08h    DWORD    total available bytes of virtual memory controlled by host
  6291.  0Ch    DWORD    total allocated bytes of virtual memory for curr virtual mach
  6292.  10h    DWORD    total available bytes of virtual memory for curr virtual mach
  6293.  14h    DWORD    total allocated bytes of virtual memory for current client
  6294.  18h    DWORD    total available bytes of virtual memory for current client
  6295.  1Ch    DWORD    total locked bytes for current client
  6296.  20h    DWORD    maximum locked bytes for current client
  6297.  24h    DWORD    highest linear address available to current client
  6298.  28h    DWORD    largest available memory block in bytes
  6299.  2Ch    DWORD    minimum allocation unit in bytes
  6300.  30h    DWORD    allocation alignment unit size in bytes
  6301.  34h 76 BYTEs    reserved (00h)
  6302. ----------310600-----------------------------
  6303. INT 31 - DPMI 0.9+ - protected mode - LOCK LINEAR REGION
  6304.     AX = 0600h
  6305.     BX:CX = starting linear address
  6306.     SI:DI = size of region in bytes
  6307. Return: CF clear if successful
  6308.     CF set on error
  6309.         none of the memory is locked
  6310.         AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see AX=0000h)
  6311. Notes:    pages at beginning and end will be locked if the region overlaps them
  6312.     may be called multiple times for a given page; the DPMI host keeps a
  6313.       lock count for each page
  6314. SeeAlso: AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h
  6315. ----------310601-----------------------------
  6316. INT 31 - DPMI 0.9+ - protected mode - UNLOCK LINEAR REGION
  6317.     AX = 0601h
  6318.     BX:CX = starting linear address
  6319.     SI:DI = size of region in bytes
  6320. Return: CF clear if successful
  6321.     CF set on error
  6322.         none of the memory is unlocked
  6323.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  6324. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  6325.     memory whose lock count has not reached zero remains locked
  6326. SeeAlso: AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h
  6327. ----------310602-----------------------------
  6328. INT 31 - DPMI 0.9+ - protected mode - MARK REAL MODE REGION AS PAGEABLE
  6329.     AX = 0602h
  6330.     BX:CX = starting linear address
  6331.     SI:DI = size of region in bytes
  6332. Return: CF clear if successful
  6333.     CF set on error    
  6334.         none of the memory is made pageable
  6335.         AX = error code (DPMI 1.0+) (8002h,8025h) (see AX=0000h)
  6336. Notes:    must relock all unlocked real mode memory before terminating process
  6337.       for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory
  6338.     pages at beginning and end will be unlocked if the region overlaps them
  6339.     pageability of real mode pages is binary, not a count
  6340. SeeAlso: AX=0600h,AX=0603h
  6341. ----------310603-----------------------------
  6342. INT 31 - DPMI 0.9+ - protected mode - RELOCK REAL MODE REGION
  6343.     AX = 0603h
  6344.     BX:CX = starting linear address
  6345.     SI:DI = size of region in bytes
  6346. Return: CF clear if successful
  6347.     CF set on error    
  6348.         none of the memory is relocked
  6349.         AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see AX=0000h)
  6350. Notes:    pages at beginning and end will be relocked if the region overlaps them
  6351.     pageability of real mode pages is binary, not a count
  6352. SeeAlso: AX=0602h
  6353. ----------310604-----------------------------
  6354. INT 31 - DPMI 0.9+ - protected mode - GET PAGE SIZE
  6355.     AX = 0604h
  6356. Return: CF clear if successful
  6357.         BX:CX = page size in bytes
  6358.     CF set on error
  6359.         AX = error code (DPMI 1.0+)
  6360.         8001h unsupported, 16-bit host
  6361. ----------310700-----------------------------
  6362. INT 31 - DPMI 0.9+ - protected mode - RESERVED FOR HISTORICAL REASONS
  6363.     AX = 0700h
  6364. ----------310701-----------------------------
  6365. INT 31 - DPMI 0.9+ - protected mode - RESERVED FOR HISTORICAL REASONS
  6366.     AX = 0701h
  6367. ----------310702-----------------------------
  6368. INT 31 - DPMI 0.9+ - protected mode - MARK PAGE AS DEMAND PAGING CANDIDATE
  6369.     AX = 0702h
  6370.     BX:CX = starting linear address
  6371.     SI:DI = number of bytes to mark as paging candidates
  6372. Return: CF clear if successful
  6373.     CF set on error
  6374.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  6375. Notes:    this function is advisory, and does not force immediate paging
  6376.     partial pages will not be discarded
  6377. SeeAlso: AX=0703h
  6378. ----------310703-----------------------------
  6379. INT 31 - DPMI 0.9+ - protected mode - DISCARD PAGE CONTENTS
  6380.     AX = 0703h
  6381.     BX:CX = starting linear address
  6382.     SI:DI = number of bytes to mark as discarded
  6383. Return: CF clear if successful
  6384.     CF set on error
  6385.         AX = error code (DPMI 1.0+) (8025h) (see AX=0000h)
  6386. Notes:    this function is advisory, and may be ignored by DPMI implementations
  6387.     partial pages will not be discarded
  6388. SeeAlso: AX=0702h
  6389. ----------310800-----------------------------
  6390. INT 31 - DPMI 0.9+ - protected mode - PHYSICAL ADDRESS MAPPING
  6391.     AX = 0800h
  6392.     BX:CX = physical address (should be above 1 MB)
  6393.     SI:DI = size in bytes
  6394. Return:    CF clear if successful
  6395.         BX:CX = linear address which maps the requested physical memory
  6396.     CF set on error
  6397.         AX = error code (DPMI 1.0+) (8003h,8021h) (see AX=0000h)
  6398. Notes:    implementations may refuse this call because it can circumvent protects
  6399.     the caller must build an appropriate selector for the memory
  6400.     do not use for memory mapped in the first megabyte
  6401. SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h
  6402. ----------310801-----------------------------
  6403. INT 31 - DPMI 1.0+ - protected mode - FREE PHYSICAL ADDRESS MAPPING
  6404.     AX = 0801h
  6405.     BX:CX = linear address returned by AX=0800h
  6406. Return: CF clear if successful
  6407.     CF set on error
  6408.         AX = error code (8025h) (see AX=0000h)
  6409. Note:    should be called at end of access to device mapped with AX=0800h
  6410. SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h
  6411. ----------310900-----------------------------
  6412. INT 31 - DPMI 0.9+ - protected mode - GET AND DISABLE VIRTUAL INTERRUPT STATE
  6413.     AX = 0900h
  6414. Return: CF clear
  6415.     virtual interrupts disabled
  6416.     AL = 00h if previously disabled
  6417.        = 01h if previously enabled
  6418.     AH preserved
  6419. Notes:    the previous state may be restored simply by executing another INT 31
  6420.     a CLI instruction may be used if the previous state is unimportant,
  6421.       but should be assumed to be very slow due to trapping by the host
  6422. SeeAlso: AX=0901h,AX=0902h
  6423. ----------310901-----------------------------
  6424. INT 31 - DPMI 0.9+ - protected mode - GET AND ENABLE VIRTUAL INTERRUPT STATE
  6425.     AX = 0901h
  6426. Return: CF clear
  6427.     virtual interrupts enabled
  6428.     AL = 00h if previously disabled
  6429.        = 01h if previously enabled
  6430.     AH preserved
  6431. Notes:    the previous state may be restored simply by executing another INT 31
  6432.     a STI instruction may be used if the previous state is unimportant,
  6433.       but should be assumed to be very slow due to trapping by the host
  6434. SeeAlso: AX=0900h,AX=0902h
  6435. ----------310902-----------------------------
  6436. INT 31 - DPMI 0.9+ - protected mode - GET VIRTUAL INTERRUPT STATE
  6437.     AX = 0902h
  6438. Return: CF clear
  6439.     AL = 00h if disabled
  6440.        = 01h if enabled
  6441. Note:    should be used rather than PUSHF because that instruction yields the
  6442.       physical interrupt state rather than the per-client virtualized
  6443.       interrupt flag
  6444. SeeAlso: AX=0900h,AX=0901h
  6445. ----------310A00-----------------------------
  6446. INT 31 - DPMI 0.9+ - protected mode - GET VENDOR SPECIFIC API ENTRY POINT
  6447.     AX = 0A00h
  6448.     DS:SI / DS:ESI -> case-sensitive ASCIZ vendor name or identifier
  6449. Return: CF clear if successful
  6450.         ES:DI / ES:EDI -> FAR extended API entry point
  6451.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  6452.     CF set on error
  6453.         AX = error code (DPMI 1.0+) (8001h) (see AX=0000h)
  6454. Notes:    extended API parameters are vendor-specific
  6455.     DPMI 1.0+ supports this function solely for backward compatibility; use
  6456.       INT 2F/AX=168Ah instead
  6457. SeeAlso: INT 2F/AX=168Ah
  6458. ----------310B00-----------------------------
  6459. INT 31 - DPMI 0.9+ - protected mode - SET DEBUG WATCHPOINT
  6460.     AX = 0B00h
  6461.     BX:CX = linear address
  6462.     DL = size (1,2,4 bytes)
  6463.     DH = type (00h execute, 01h write, 02h read/write)
  6464. Return: CF clear if successful
  6465.         BX = watchpoint handle
  6466.     CF set on error
  6467.         AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see AX=0000h)
  6468. SeeAlso: AX=0212h,AX=0601h
  6469. ----------310B01-----------------------------
  6470. INT 31 - DPMI 0.9+ - protected mode - CLEAR DEBUG WATCHPOINT
  6471.     AX = 0B01h
  6472.     BX = watchpoint handle
  6473. Return: CF clear if successful
  6474.     CF set on error
  6475.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  6476. Note:    the watchpoint handle is freed
  6477. SeeAlso: AX=0B00h
  6478. ----------310B02-----------------------------
  6479. INT 31 - DPMI 0.9+ - protected mode - GET STATE OF DEBUG WATCHPOINT
  6480.     AX = 0B02h
  6481.     BX = watchpoint handle
  6482. Return: CF clear if successful
  6483.         AX = status flags
  6484.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  6485.     CF set on error
  6486.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  6487. SeeAlso: AX=0B00h,AX=0B03h
  6488. ----------310B03-----------------------------
  6489. INT 31 - DPMI 0.9+ - protected mode - RESET DEBUG WATCHPOINT
  6490.     AX = 0B03h
  6491.     BX = watchpoint handle
  6492. Return: CF clear if successful
  6493.     CF set on error
  6494.         AX = error code (DPMI 1.0+) (8023h) (see AX=0000h)
  6495. SeeAlso: AX=0B02h
  6496. ----------310C00-----------------------------
  6497. INT 31 - DPMI 1.0+ - protected mode - INSTALL RESIDENT HANDLER INIT CALLBACK
  6498.     AX = 0C00h
  6499.     ES:(E)DI -> resident service provider structure (see below)
  6500. Return: CF clear if successful
  6501.     CF set on error
  6502.         AX = error code (8015h,8021h,8025h) (see AX=0000h)
  6503. Note:    calling this function declares an intent to provide resident
  6504.       protected mode services after terminating with AX=0C01h
  6505. SeeAlso: AX=0303h,AX=0C01h
  6506.  
  6507. Format of resident service provider structure:
  6508. Offset    Size    Description
  6509.  00h    QWORD    descriptor for 16-bit data segment
  6510.  08h    QWORD    descriptor for 16-bit code segment (zeros if not supported)
  6511.  10h    WORD    offset of 16-bit callback procedure
  6512.  12h  2 BYTEs    reserved
  6513.  14h    QWORD    descriptor for 32-bit data segment
  6514.  1Ch    QWORD    descriptor for 32-bit code segment (zeros if not supported)
  6515.  24h    DWORD    offset of 32-bit callback procedure
  6516. ----------310C01-----------------------------
  6517. INT 31 - DPMI 1.0+ - protected mode - TERMINATE AND STAY RESIDENT
  6518.     AX = 0C01h
  6519.     BL = return code
  6520.     DX = number of paragraphs of DOS memory to reserve (0 or >= 6)
  6521. Return: never
  6522. Notes:    should only be used if the program will only provide services to
  6523.       other DPMI programs
  6524.     any protected mode memory remains allocated to the program unless
  6525.       explicitly freed before this call
  6526.     must first call AX=0C00h or program will simply be terminated
  6527. SeeAlso: AX=0C00h,INT 21/AH=31h
  6528. ----------310D00-----------------------------
  6529. INT 31 - DPMI 1.0+ - protected mode - ALLOCATE SHARED MEMORY
  6530.     AX = 0D00h
  6531.     ES:(E)DI -> shared memory allocation request structure (see below)
  6532. Return: CF clear if successful
  6533.         request structure updated
  6534.     CF set on error
  6535.         AX = error code (8012h,8013h,8014h,8016h,8021h) (see AX=0000h)
  6536. Note:    first 16 bytes of memory block will be initialized to zeros on the
  6537.       first allocation
  6538. SeeAlso: AX=0501h,AX=0D01h,AX=0D02h
  6539.  
  6540. Format of shared memory allocation request structure:
  6541. Offset    Size    Description
  6542.  00h    DWORD    requested length of shared memory block in bytes
  6543.  04h    DWORD    (return) allocated length of block
  6544.  08h    DWORD    (return) shared memory handle
  6545.  0Ch    DWORD    (return) linear address of memory block
  6546.  10h  6 BYTEs    selector:offset32 of ASCIZ name for memory block
  6547.          (name max 128 bytes)
  6548.  16h  2 BYTEs    reserved
  6549.  18h  4 BYTEs    reserved (00h)
  6550. ----------310D01-----------------------------
  6551. INT 31 - DPMI 1.0+ - protected mode - FREE SHARED MEMORY
  6552.     AX = 0D01h
  6553.     SI:DI = shared memory block handle
  6554. Return: CF clear if successful
  6555.     CF set on error
  6556.         AX = error code (8023h) (see AX=0000h)
  6557. Notes:    handle becomes invalid after this call
  6558.     DPMI maintains separate global and virtual machine use counts for each
  6559.       shared memory block; when the global use counts reaches zero, the
  6560.       block is finally destroyed
  6561. SeeAlso: AX=0502h,AX=0D00h
  6562. ----------310D02-----------------------------
  6563. INT 31 - DPMI 1.0+ - protected mode - SERIALIZE SHARED MEMORY
  6564.     AX = 0D02h
  6565.     SI:DI = shared memory block handle
  6566.     DX = flags
  6567.         bit 0: return immediately rather than suspending if serialization
  6568.                 unavailable
  6569.         1: shared rather than exclusive serialization
  6570.         2-15: reserved (0)
  6571. Return: CF clear if successful
  6572.     CF set on error
  6573.         AX = error code (8004h,8005h,8017h-8019h,8023h) (see AX=0000h)
  6574. Notes:    an exclusive serialization blocks any other serialization attempts for
  6575.       the same block by another virtual machine; a shared serialization
  6576.       blocks attempts at exclusive serialization by another virtual machine
  6577.     hosts are not required to detect deadlock
  6578.     a client's interrupt handler can cancel a serialization call which
  6579.       caused it to block by calling AX=0D03h
  6580. SeeAlso: AX=0D00h,AX=0D03h
  6581. ----------310D03-----------------------------
  6582. INT 31 - DPMI 1.0+ - protected mode - FREE SERIALIZATION ON SHARED MEMORY
  6583.     AX = 0D03h
  6584.     SI:DI = shared memory block handle
  6585.     DX = flags
  6586.         bit 0: release shared serialization rather than exclusive serialztn
  6587.         bit 1: free pending serialization
  6588.         bits 2-15: reserved (0)
  6589. Return: CF clear if successful
  6590.     CF set on error
  6591.         AX = error code (8002h,8023h) (see AX=0000h)
  6592. SeeAlso: AX=0D00h,AX=0D02h
  6593. ----------310E00-----------------------------
  6594. INT 31 - DPMI 1.0+ - protected mode - GET COPROCESSOR STATUS
  6595.     AX = 0E00h
  6596. Return: CF clear
  6597.     AX = coprocessor status
  6598.         bit 0: numeric coprocessor enabled for current client
  6599.         bit 1: client is emulating coprocessor
  6600.         bit 2: numeric coprocessor is present
  6601.         bit 3: host is emulating coprocessor instructions
  6602.         bits 4-7: coprocessor type
  6603.             0000 none
  6604.         0010 80287
  6605.         0011 80387
  6606.         0100 80486 with numeric coprocessor
  6607.         other reserved
  6608.         bits 8-15: not used
  6609. SeeAlso: AX=0E01h
  6610. ----------310E01-----------------------------
  6611. INT 31 - DPMI 1.0+ - protected mode - SET EMULATION
  6612.     AX = 0E01h
  6613.     BX = coprocessor flag bits
  6614.         bit 0: enable numeric coprocessor for current client
  6615.         bit 1: client will emulate coprocessor
  6616.         bits 2-15: not used
  6617. Return: CF clear if successful
  6618.     CF set on error
  6619.         AX = error code (8026h) (see AX=0000h)
  6620. SeeAlso: AX=0E00h
  6621. ----------32---------------------------------
  6622. INT 32 - reportedly used by "Tiny" Viruses
  6623. SeeAlso: INT 60"Virus"
  6624. ----------330000-----------------------------
  6625. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  6626.     AX = 0000h
  6627. Return: AX = status
  6628.         0000h hardware/driver not installed
  6629.         FFFFh hardware/driver installed
  6630.     BX = number of buttons
  6631.         FFFFh two buttons
  6632.         0000h other than two
  6633.         0003h Mouse Systems/Logitech mouse
  6634. Notes:    to use mouse on a Hercules-compatible monographics card in graphics
  6635.       mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1,
  6636.       and then call this function.
  6637.     the Logitech mouse driver contains the signature string "LOGITECH"
  6638. SeeAlso: AX=0021h,INT 74
  6639. ----------330001-----------------------------
  6640. INT 33 - MS MOUSE - SHOW MOUSE CURSOR
  6641.     AX = 0001h
  6642. SeeAlso: AX=0002h,INT 16/AX=FFFEh
  6643. ----------330002-----------------------------
  6644. INT 33 - MS MOUSE - HIDE MOUSE CURSOR
  6645.     AX = 0002h
  6646. Note:    multiple calls to hide the cursor will require multiple calls to
  6647.       function 01h to unhide it.
  6648. SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh
  6649. ----------330003-----------------------------
  6650. INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS
  6651.     AX = 0003h
  6652. Return: BX = button status
  6653.        bit 0  left button pressed if 1
  6654.        bit 1  right button pressed if 1
  6655.        bit 2  middle button pressed if 1 (Mouse Systems/Logitech mouse)
  6656.     CX = column
  6657.     DX = row
  6658. SeeAlso: AX=0004h,AX=000Bh
  6659. ----------330004-----------------------------
  6660. INT 33 - MS MOUSE - POSITION MOUSE CURSOR
  6661.     AX = 0004h
  6662.     CX = column
  6663.     DX = row
  6664. Note:    the row and column are truncated to the next lower multiple of the cell
  6665.       size; however, some versions of the Microsoft documentation
  6666.       incorrectly state that the coordinates are rounded
  6667. SeeAlso: AX=0003h
  6668. ----------330005-----------------------------
  6669. INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA
  6670.     AX = 0005h
  6671.     BX = button
  6672.         0000h left
  6673.         0001h right
  6674.         0002h middle (Mouse Systems/Logitech mouse)
  6675. Return: AX = button states
  6676.         bit 0 left button pressed if 1
  6677.         bit 1 right button pressed if 1
  6678.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  6679.     BX = number of times specified button has been pressed since last call
  6680.     CX = column at time specified button was last pressed
  6681.     DX = row at time specified button was last pressed
  6682. SeeAlso: AX=0006h
  6683. ----------330006-----------------------------
  6684. INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA
  6685.     AX = 0006h
  6686.     BX = button
  6687.         0000h left
  6688.         0001h right
  6689.         0002h middle (Mouse Systems/Logitech mouse)
  6690. Return: AX = button states
  6691.         bit 0 left button pressed if 1
  6692.         bit 1 right button pressed if 1
  6693.         bit 2 middle button pressed if 1 (Mouse Systems/Logitech mouse)
  6694.     BX = number of times specified button has been released since last call
  6695.     CX = column at time specified button was last released
  6696.     DX = row at time specified button was last released
  6697. SeeAlso: AX=0005h
  6698. ----------330007-----------------------------
  6699. INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE
  6700.     AX = 0007h
  6701.     CX = minimum column
  6702.     DX = maximum column
  6703. SeeAlso: AX=0008h,AX=0010h
  6704. ----------330008-----------------------------
  6705. INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE
  6706.     AX = 0008h
  6707.     CX = minimum row
  6708.     DX = maximum row
  6709. SeeAlso: AX=0007h,AX=0010h
  6710. ----------330009-----------------------------
  6711. INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR
  6712.     AX = 0009h
  6713.     BX = column of cursor hot spot in bitmap (-16 to 16)
  6714.     CX = row of cursor hot spot (-16 to 16)
  6715.     ES:DX -> bitmap
  6716.         16 words screen mask
  6717.         16 words cursor mask
  6718.             each word defines the sixteen pixels of a row, low bit
  6719.             rightmost
  6720. SeeAlso: AX=000Ah,AX=0012h
  6721. ----------33000A-----------------------------
  6722. INT 33 - MS MOUSE - DEFINE TEXT CURSOR
  6723.     AX = 000Ah
  6724.     BX = hardware/software text cursor
  6725.         0000h software
  6726.         CX = screen mask
  6727.         DX = cursor mask
  6728.         0001h hardware
  6729.         CX = start scan line
  6730.         DX = end scan line
  6731. Note:    when the software cursor is selected, the char/attribute data at the
  6732.       current screen position is ANDed with the screen mask and then XORed
  6733.       with the cursor mask
  6734. SeeAlso: AX=0009h
  6735. ----------33000B-----------------------------
  6736. INT 33 - MS MOUSE - READ MOTION COUNTERS
  6737.     AX = 000Bh
  6738. Return: CX = number of mickeys mouse moved horizontally since last call
  6739.     DX = number of mickeys mouse moved vertically
  6740. Notes:    a mickey is the smallest increment the mouse can sense
  6741.     positive values indicate down/right
  6742. SeeAlso: AX=0003h,AX=001Bh
  6743. ----------33000C-----------------------------
  6744. INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  6745.     AX = 000Ch
  6746.     CX = call mask
  6747.          bit 0 call if mouse moves
  6748.          bit 1 call if left button pressed
  6749.          bit 2 call if left button released
  6750.          bit 3 call if right button pressed
  6751.          bit 4 call if right button released
  6752.          bit 5 call if middle button pressed (Mouse Systems/Logitech mouse)
  6753.          bit 6 call if middle button released (Mouse Sys/Logitech mouse)
  6754.     ES:DX -> FAR routine
  6755. Notes:    when the subroutine is called, it is passed the following values:
  6756.       AX = condition mask (same bit assignments as call mask)
  6757.       BX = button state
  6758.       CX = cursor column
  6759.       DX = cursor row
  6760.       SI = horizontal mickey count
  6761.       DI = vertical mickey count
  6762.     some versions of the Microsoft documentation incorrectly state that CX
  6763.       bit 0 means call if mouse cursor moves, and swap the meanings of SI
  6764.       and DI
  6765. SeeAlso: AX=0018h
  6766. ----------33000D-----------------------------
  6767. INT 33 - MS MOUSE - LIGHT PEN EMULATION ON
  6768.     AX = 000Dh
  6769. SeeAlso: AX=000Eh
  6770. ----------33000E-----------------------------
  6771. INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF
  6772.     AX = 000Eh
  6773. SeeAlso: AX=000Dh
  6774. ----------33000F-----------------------------
  6775. INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO
  6776.     AX = 000Fh
  6777.     CX = number of mickeys per 8 pixels horizontally (default 8)
  6778.     DX = number of mickeys per 8 pixels vertically (default 16)
  6779. SeeAlso: AX=0013h,AX=001Ah
  6780. ----------330010-----------------------------
  6781. INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING
  6782.     AX = 0010h
  6783.     CX,DX = X,Y coordinates of upper left corner
  6784.     SI,DI = X,Y coordinates of lower right corner
  6785. Note:    mouse cursor is hidden during updating, and needs to be explicitly
  6786.       turned on again
  6787. SeeAlso: AX=0001h,AX=0002h,AX=0007h
  6788. ----------330012-----------------------------
  6789. INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  6790.     AX = 0012h
  6791.     BH = cursor width in words
  6792.     CH = rows in cursor
  6793.     BL = horizontal hot spot (-16 to 16)
  6794.     CL = vertical hot spot (-16 to 16)
  6795.     ES:DX -> bit map of screen and cursor maps
  6796. Return: AX = FFFFh if successful
  6797. SeeAlso: AX=0009h
  6798. ----------330013-----------------------------
  6799. INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD
  6800.     AX = 0013h
  6801.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  6802. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  6803. SeeAlso: AX=000Fh,AX=001Bh
  6804. ----------330014-----------------------------
  6805. INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES
  6806.     AX = 0014h
  6807.     CX = call mask (see AX=000Ch)
  6808.     ES:DX -> FAR routine 
  6809. Return: CX = call mask of previous interrupt routine
  6810.     ES:DX = FAR address of previous interrupt routine
  6811. SeeAlso: AX=0018h
  6812. ----------330015-----------------------------
  6813. INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS
  6814.     AX = 0015h
  6815. Return: BX = size of buffer needed to store driver state
  6816. SeeAlso: AX=0016h,AX=0017h
  6817. ----------330016-----------------------------
  6818. INT 33 - MS MOUSE - SAVE DRIVER STATE
  6819.     AX = 0016h
  6820.     BX = size of buffer (see AX=0015h)
  6821.     ES:DX -> buffer for driver state
  6822. Note:    although not documented, many drivers appear to require BX on input
  6823. SeeAlso: AX=0015h,AX=0017h
  6824. ----------330017-----------------------------
  6825. INT 33 - MS MOUSE - RESTORE DRIVER STATE
  6826.     AX = 0017h
  6827.     BX = size of buffer (see AX=0015h)
  6828.     ES:DX -> buffer containing saved state
  6829. Notes:    although not documented, many drivers appear to require BX on input
  6830.     some mouse drivers range-check the values in the saved state based on
  6831.       the current video mode; thus, the video mode should be restored
  6832.       before the mouse driver's state is restored
  6833. SeeAlso: AX=0015h,AX=0016h
  6834. ----------330018-----------------------------
  6835. INT 33 - MS MOUSE - SET ALTERNATE MOUSE USER HANDLER
  6836.     AX = 0018h
  6837.     CX = call mask
  6838.          bit 0 call if alt key pressed during event
  6839.          bit 1 call if ctrl key pressed during event
  6840.          bit 2 call if shift button pressed during event
  6841.          bit 3 call if right button released
  6842.          bit 4 call if right button pressed
  6843.          bit 5 call if left button released
  6844.          bit 6 call if left button pressed
  6845.          bit 7 call if mouse moves
  6846.     ES:DX = address of FAR routine
  6847. Return: AX = 0018h if successful
  6848.        = FFFFh on error
  6849. Notes:    when the subroutine is called, it is passed the following values:
  6850.       AX = condition mask (same bit assignments as call mask)
  6851.       BX = button state
  6852.       CX = cursor column
  6853.       DX = cursor row
  6854.       DI = horizontal mickey count
  6855.       SI = vertical mickey count
  6856.     up to three handlers can be defined by separate calls to this function
  6857. SeeAlso: AX=0014h,AX=0019h
  6858. ----------330019-----------------------------
  6859. INT 33 - MS MOUSE - RETURN USER ALTERNATE INTERRUPT VECTOR
  6860.     AX = 0019h
  6861.     CX = call mask
  6862. Return: BX:DX = user interrupt vector
  6863.     CX = call mask (0 if not found)
  6864. Note:    attempts to find a user event handler (defined by function 18h)
  6865.       whose call mask matches CX
  6866. SeeAlso: AX=0018h
  6867. ----------33001A-----------------------------
  6868. INT 33 - MS MOUSE - SET MOUSE SENSITIVITY
  6869.     AX = 001Ah
  6870.     BX = horizontal speed \
  6871.     CX = vertical speed   / (see AX=000Fh)
  6872.     DX = double speed threshold (see AX=0013h)
  6873. SeeAlso: AX=0013h,AX=001Bh
  6874. ----------33001B-----------------------------
  6875. INT 33 - MS MOUSE - RETURN MOUSE SENSITIVITY
  6876.     AX = 001Bh
  6877. Return: BX = horizontal speed
  6878.     CX = vertical speed
  6879.     DX = double speed threshold
  6880. SeeAlso: AX=000Bh,AX=001Ah
  6881. ----------33001C-----------------------------
  6882. INT 33 - MS MOUSE - SET INTERRUPT RATE
  6883.     AX = 001Ch
  6884.     BX = rate
  6885.         00h no interrupts allowed
  6886.         01h 30 per second
  6887.         02h 50 per second
  6888.         03h 100 per second
  6889.         04h 200 per second
  6890. Notes:    only available on InPort mouse
  6891.     values greater than 4 may cause unpredictable driver behavior
  6892. ----------33001D-----------------------------
  6893. INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER
  6894.     AX = 001Dh
  6895.     BX = display page number
  6896. Note:    the cursor will be displayed on the specified page
  6897. SeeAlso: AX=001Eh
  6898. ----------33001E-----------------------------
  6899. INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER
  6900.     AX = 001Eh
  6901. Return: BX = display page number
  6902. SeeAlso: AX=001Dh
  6903. ----------33001F-----------------------------
  6904. INT 33 - MS MOUSE - DISABLE MOUSE DRIVER
  6905.     AX = 001Fh
  6906. Return: AX = 001Fh successful
  6907.          FFFFh unsuccessful
  6908.     ES:BX = vector for INT 33h before mouse driver was first installed
  6909. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  6910.     if you restore Int 33h to ES:BX, driver will be completely disabled
  6911. SeeAlso: AX=0020h
  6912. ----------330020-----------------------------
  6913. INT 33 - MS MOUSE - ENABLE MOUSE DRIVER
  6914.     AX = 0020h
  6915. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  6916.       which were removed by function 1Fh
  6917. SeeAlso: AX=001Fh
  6918. ----------330021-----------------------------
  6919. INT 33 - MS MOUSE - SOFTWARE RESET
  6920.     AX = 0021h
  6921. Return: AX = FFFFh if mouse driver installed
  6922.          0021h if mouse driver not installed
  6923.     BX = 2 if mouse driver is installed
  6924. Note:    identical to funtion 00h, but does not reset the mouse
  6925. SeeAlso: AX=0000h
  6926. ----------330022-----------------------------
  6927. INT 33 - MS MOUSE - SET LANGUAGE FOR MESSAGES
  6928.     AX = 0022h
  6929.     BX = language
  6930.         00h English
  6931.         01h French
  6932.         02h Dutch
  6933.         03h German
  6934.         04h Swedish
  6935.         05h Finnish
  6936.         06h Spanish
  6937.         07h Portugese
  6938.         08h Italian
  6939. Note:    only available on international versions of the driver, US versions
  6940.       ignore this call
  6941. SeeAlso: AX=0023h
  6942. ----------330023-----------------------------
  6943. INT 33 - MS MOUSE - GET LANGUAGE FOR MESSAGES
  6944.     AX = 0023h
  6945. Return:    BX = language (see AX=0022h)
  6946. Note:    the US version of the driver always returns zero 
  6947. SeeAlso: AX=0022h
  6948. ----------330024-----------------------------
  6949. INT 33 - MS MOUSE - GET SOFTWARE VERSION AND MOUSE TYPE
  6950.     AX = 0024h
  6951. Return: AX = FFFFh on error
  6952.     otherwise,
  6953.         BH = major version
  6954.         BL = minor version
  6955.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  6956.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  6957. SeeAlso: AX=004Dh
  6958. ----------330026-----------------------------
  6959. INT 33 - MS MOUSE - ???
  6960.     AX = 0026h
  6961. Note:    called by the newest Microsoft applications
  6962. ----------33002C-----------------------------
  6963. INT 33 - MS MOUSE - SET ACCELERATION PROFILES
  6964.     AX = 002Ch
  6965.     ES:DX -> name of file containing profiles
  6966. Note:    see MOUSEPRO.FIL for an example set of acceleration profiles
  6967. SeeAlso: AX=002Dh
  6968. ----------33002D-----------------------------
  6969. INT 33 - MS MOUSE - SELECT ACCELERATION PROFILE
  6970.     AX = 002Dh
  6971.     BX = acceleration level (01h to 04h)
  6972. Note:    acceleration of FFFFh appears to be legal as well, since it is used
  6973.       by the MS Control Panel v7.04
  6974. SeeAlso: AX=002Ch
  6975. ----------330042-----------------------------
  6976. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  6977.     AX = 0042h
  6978. Return: AX = FFFFh successful
  6979.         BX = buffer size in bytes for functions 50h and 52h
  6980.        = 0000h MSMOUSE not installed
  6981.        = 0042h functions 42h, 50h, and 52h not supported
  6982. SeeAlso: AX=0050h
  6983. ----------33004D-----------------------------
  6984. INT 33 - MS MOUSE, LOGITECH - RETURN POINTER TO COPYRIGHT STRING
  6985.     AX = 004Dh
  6986. Return: ES:DI -> copyright message "Copyright 1983 Microsoft ***"
  6987. SeeAlso: AX=0024h,AX=006Dh
  6988. ----------330050-----------------------------
  6989. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  6990.     AX = 0050h
  6991.     BX = buffer size
  6992.     ES:DX -> buffer
  6993. Return: AX = FFFFh if successful
  6994. SeeAlso: AX=0042h,AX=0052h
  6995. ----------330052-----------------------------
  6996. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  6997.     AX = 0052h
  6998.     BX = buffer size
  6999.     ES:DX -> buffer
  7000. Return: AX = FFFFh if successful
  7001. SeeAlso: AX=0050h
  7002. ----------33006D-----------------------------
  7003. INT 33 - MS MOUSE, Logitech - GET VERSION STRING
  7004.     AX = 006Dh
  7005. Return: ES:DI -> Microsoft version number of resident driver
  7006. SeeAlso: AX=004Dh
  7007. ----------331D6C-----------------------------
  7008. INT 33 - LOGITECH - GET COMPASS PARAMETER
  7009.     AX = 1D6Ch
  7010. Return: BX = direction (0=north, 1=south, 2=east, 3=west)
  7011. SeeAlso: AX=1E6Ch
  7012. ----------331E6C-----------------------------
  7013. INT 33 - LOGITECH - SET COMPASS PARAMETER
  7014.     AX = 1E6Ch
  7015.     BX = direction (0=north, 1=south, 2=east, 3=west)
  7016. SeeAlso: AX=1D6Ch
  7017. ----------331F6C-----------------------------
  7018. INT 33 - LOGITECH - GET BALLISTICS INFORMATION
  7019.     AX = 1F6Ch
  7020. Return: BX = 0=off, 1=on
  7021.     CX = 1=low, 2=high
  7022. SeeAlso: AX=236Ch
  7023. ----------33206C-----------------------------
  7024. INT 33 - LOGITECH - SET LEFT OR RIGHT PARAMETER
  7025.     AX = 206Ch
  7026.     BX = parameter (00h = right, FFh = left)
  7027. SeeAlso: AX=216Ch
  7028. ----------33216C-----------------------------
  7029. INT 33 - LOGITECH - GET LEFT OR RIGHT PARAMETER
  7030.     AX = 216Ch
  7031. Return: BX = parameter (00h = right, FFh = left)
  7032. SeeAlso: AX=206Ch
  7033. ----------33226C-----------------------------
  7034. INT 33 - LOGITECH - REMOVE DRIVER FROM MEMORY
  7035.     AX = 226Ch
  7036. Note:    this only frees memory; does not restore hooked interrupts
  7037. ----------33236C-----------------------------
  7038. INT 33 - LOGITECH - SET BALLISTICS INFORMATION
  7039.     AX = 236Ch
  7040.     BX = 0=off, 1=on
  7041.     CX = 1=low, 2=high
  7042. SeeAlso: AX=1F6Ch
  7043. ----------33246C-----------------------------
  7044. INT 33 - LOGITECH - GET PARAMETERS AND RESET SERIAL MOUSE
  7045.     AX = 246Ch
  7046.     ES:DX -> parameter table buffer (see below)
  7047. Return: AX = FFFFh if driver installed for serial mouse
  7048. SeeAlso: AX=0000h,AX=256Ch
  7049.  
  7050. Format of parameter table:
  7051. Offset    Size    Description
  7052.  00h    WORD    baud rate divided by 100  (serial mouse only)
  7053.  02h    WORD    emulation          (serial mouse only)
  7054.  04h    WORD    report rate          (serial mouse only)
  7055.  06h    WORD    firmware revision      (serial mouse only)
  7056.  08h    WORD    0              (serial mouse only)
  7057.  0Ah    WORD    port              (serial mouse only)
  7058.  0Ch    WORD    physical buttons
  7059.  0Eh    WORD    logical buttons
  7060. ----------33256CBX00h -----------------------
  7061. INT 33 - LOGITECH - SET PARAMETERS
  7062.     AX = 256Ch
  7063.     BX = 00h set baud rate (serial mouse only)
  7064.         CX = rate (0=1200, 1=2400, 2=4800, 3=9600)
  7065.        = 01h set emulation (serial mouse only)
  7066.         CX = emulation
  7067.             0 = 5 byte packed binary
  7068.             1 = 3 byte packed binary
  7069.             2 = hexadecimal
  7070.             3 = relative bid pad
  7071.             4 = not supported
  7072.             5 = MM Series
  7073.             6 = not supported
  7074.             7 = Microsoft
  7075.        = 02h set report rate (serial mouse only)
  7076.         CX = rate (0=10, 1=20, 2=35, 3=50, 4=70, 5=100, 6=150)
  7077.        = 03h set port (serial mouse only)
  7078.         CX = port (1, 2)
  7079.        = 04h set mouse logical buttons
  7080.         CX = buttons (2, 3)
  7081. Return: AX = FFFFh if driver installed for serial mouse
  7082. SeeAlso: AX=246Ch
  7083. ----------33266C-----------------------------
  7084. INT 33 - LOGITECH - GET VERSION???
  7085.     AX = 266Ch
  7086. Return: BX = 'SS'
  7087.     CH = '4'  major version number
  7088.     CL = '1'  minor version number
  7089. SeeAlso: AX=006Dh
  7090. ----------33276C-----------------------------
  7091. INT 33 - LOGITECH - ??? Tries MMSeries, Baud 2400
  7092.     AX = 276Ch
  7093. ----------34---------------------------------
  7094. INT 34 - Borland/Microsoft languages - Floating Point emulation
  7095.     This interrupt emulates opcode D8h
  7096. ----------35---------------------------------
  7097. INT 35 - Borland/Microsoft languages - Floating Point emulation
  7098.     This interrupt emulates opcode D9h
  7099. ----------36---------------------------------
  7100. INT 36 - Borland/Microsoft languages - Floating Point emulation
  7101.     This interrupt emulates opcode DAh
  7102. ----------37---------------------------------
  7103. INT 37 - Borland/Microsoft languages - Floating Point emulation
  7104.     This interrupt emulates opcode DBh
  7105. ----------38---------------------------------
  7106. INT 38 - Borland/Microsoft languages - Floating Point emulation
  7107.     This interrupt emulates opcode DCh
  7108. ----------39---------------------------------
  7109. INT 39 - Borland/Microsoft languages - Floating Point emulation
  7110.     This interrupt emulates opcode DDh
  7111. ----------3A---------------------------------
  7112. INT 3A - Borland/Microsoft languages - Floating Point emulation
  7113.     This interrupt emulates opcode DEh
  7114. ----------3B---------------------------------
  7115. INT 3B - Borland/Microsoft languages - Floating Point emulation
  7116.     This interrupt emulates opcode DFh
  7117. ----------3C---------------------------------
  7118. INT 3C - Borland/Microsoft languages - Floating Point emulation
  7119.     This interrupt emulates instructions with a segment override
  7120. Note:    the generated code is  CD 3C xy mm ....
  7121.     where xy is a modified ESC instruction and mm is the modR/M byte.  The
  7122.     xy byte appears to be encoded as
  7123.         s s 0 1 1 x x x
  7124.     where "ss" specifies the segment override:
  7125.         00 -> DS:
  7126.         01 -> SS:
  7127.         10 -> CS:
  7128.         11 -> ES:
  7129. ----------3D---------------------------------
  7130. INT 3D - Borland/Microsoft languages - Floating Point emulation
  7131.     This interrupt emulates a standalone FWAIT instruction
  7132. ----------3E---------------------------------
  7133. INT 3E - Borland languages - Floating Point emulation "shortcut" call
  7134.     The two bytes following the INT 3E instruction are the subcode and
  7135.     a NOP (90h)
  7136.  
  7137. Subcode        Function
  7138.  DCh    load 8086 stack with 8087 registers
  7139.  DEh    load 8087 registers from 8086 stack
  7140.  E0h    round TOS and R1 to single precision, compare, pop twice
  7141.  E2h    round TOS and R1 to double precision, compare, pop twice
  7142.     Note: apparently buggy in TPas5.5, actually rounding to single prec.
  7143.  E4h    compare TOS/R1 with two POP's
  7144.  E6h    compare TOS/R1 with POP
  7145.  E8h    FTST (check TOS value)
  7146.  EAh    FXAM (check TOS value)
  7147.  ECh    sine
  7148.  EEh    cosine
  7149.  F0h    tangent
  7150.  F2h    arctangent
  7151.  F4h    Ln (FLDLN2 to TOS)
  7152.  F6h    Log2 (FLDLG2 to TOS)
  7153.  F8h    Log10 (FLDLG10 to TOS
  7154.  FAh    Exp (FLDL2E to TOS)
  7155.  FCh    TOS = 2**TOS
  7156.  FEh    TOS = 10**TOS
  7157. ----------3F---------------------------------
  7158. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE, Borland TLINK VROOMM)
  7159. Note:    INT 3F is the default, and may be overridden while linking
  7160. ----------3F---------------------------------
  7161. INT 3F - Microsoft Dynamic Link Library manager
  7162. ----------40---------------------------------
  7163. INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS
  7164. SeeAlso: INT 13,INT 63
  7165. ----------40---------------------------------
  7166. INT 40 - Z100 - Master 8259 - Parity error or S100 error
  7167. ----------41---------------------------------
  7168. INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE
  7169. Note:    the default parameter table array is located at F000h:E401h in 100%
  7170.       compatible BIOSes
  7171. SeeAlso: INT 13/AH=09h,INT 1E,INT 46
  7172.  
  7173. Format of fixed disk parameters:
  7174. Offset    Size    Description
  7175.  00h    WORD    number of cylinders
  7176.  02h    BYTE    number of heads
  7177.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  7178.  05h    WORD    starting write precompensation cylinder number
  7179.  07h    BYTE    maximum ECC burst length (XT only)
  7180.  08h    BYTE    control byte
  7181.            bits 0-2: drive option (XT only, 0 for others)
  7182.            bit 3:    set if more than 8 heads (AT and later only)
  7183.            bit 4:    always 0
  7184.            bit 5:    set if manufacturer's defect map on max cylinder+1
  7185.                  (AT and later only)
  7186.            bit 6:    disable ECC retries
  7187.            bit 7:    disable access retries
  7188.  09h    BYTE    standard timeout (XT only, 0 for others)
  7189.  0Ah    BYTE    formatting timeout (XT only, 0 for others)
  7190.  0Bh    BYTE    timeout for checking drive (XT only, 0 for others)
  7191.  0Ch    WORD    cylinder number of landing zone (AT and later only)
  7192.  0Eh    BYTE    number of sectors per track (AT and later only)
  7193.  0Fh    BYTE    reserved
  7194. ----------41---------------------------------
  7195. INT 41 - Z100 - Master 8259 - Processor Swap
  7196. ----------42---------------------------------
  7197. INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA)
  7198. SeeAlso: INT 10
  7199. Note:    not used by PS/2 built-in VGA or XGA
  7200. ----------42---------------------------------
  7201. INT 42 - Z100 - Master 8259 - Timer
  7202. ----------43---------------------------------
  7203. INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA)
  7204.    points at graphics data for characters 00h-7Fh of the current font
  7205. SeeAlso: INT 1F,INT 44"VIDEO"
  7206. ----------43---------------------------------
  7207. INT 43 - Z100 - Master 8259 - Slave 8259 input
  7208. Note:    slave runs in special fully nested mode
  7209. ----------44---------------------------------
  7210. INT 44 - VIDEO DATA - ROM BIOS CHARACTER FONT, CHARACTERS 00h-7Fh (PCjr)
  7211.    points at graphics data for current character font
  7212. SeeAlso: INT 1F,INT 43"VIDEO"
  7213. ----------44---------------------------------
  7214. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  7215. ----------44---------------------------------
  7216. INT 44 - IBM 3270-PC High Level Language API
  7217.     DS:SI -> parameter control block
  7218. ----------44---------------------------------
  7219. INT 44 - Z100 - Master 8259 - Serial A
  7220. SeeAlso: INT 45"Z100"
  7221. ----------45---------------------------------
  7222. INT 45 - Z100 - Master 8259 - Serial B
  7223. SeeAlso: INT 44"Z100"
  7224. ----------46---------------------------------
  7225. INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE
  7226. SeeAlso: INT 13/AH=09h,INT 41
  7227. ----------46---------------------------------
  7228. INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen
  7229. SeeAlso: INT 47"Z100"
  7230. ----------47---------------------------------
  7231. INT 47 - Z100 - Master 8259 - Printer
  7232. SeeAlso: INT 46"Z100"
  7233. ----------478000-----------------------------
  7234. INT 47 - SQL Base - DATABASE ENGINE API
  7235.     AX = 8000h
  7236.     DS:BX -> parameter block, first word is function number
  7237. Note:    SQL Base is a network-oriented database engine by Gupta Technologies
  7238.  
  7239. Values for function number:
  7240.  01h    "SQLFINI" initalialize application's use of the database
  7241.  02h    "SQLFDON" application is done using the database
  7242.  03h    "SQLFCON" connect to a cursor/database
  7243.  04h    "SQLFDIS" disconnect from a cursor/database
  7244.  05h    "SQLFCOM" compile a SQL command
  7245.  06h    "SQLFEXE" execute a SQL command
  7246.  07h    "SQLFCEX" compile and execute a SQL command
  7247.  08h    "SQLFCMT" commit a transaction to the database
  7248.  09h    "SQLFDES" describe the items of a SELECT statement
  7249.  0Ah    "SQLFGFI" get fetch information
  7250.  0Bh    "SQLFFBK" fetch previous result row from SELECT statement
  7251.  0Ch    "SQLFFET" fetch next result row from SELECT statement
  7252.  0Dh    "SQLFEFB" enable fetch backwards
  7253.  0Eh    "SQLFPRS" position in result set
  7254.  0Fh    "SQLFURS" undo result set
  7255.  10h    "SQLFNBV" get number of bind variables
  7256.  11h    "SQLFBND" bind data variables
  7257.  12h    "SQLFBNN" bind numerics
  7258.  13h    "SQLFBLN" bind long number
  7259.  14h    "SQLFBLD" bind long data variables
  7260.  15h    "SQLFSRS" start restriction set processing
  7261.  16h    "SQLFRRS" restart restriction set processing
  7262.  17h    "SQLFCRS" close restriction set
  7263.  18h    "SQLFDRS" drop restriction set
  7264.  19h    "SQLFARF" apply Roll Forward journal
  7265.  1Ah    "SQLFERF" end Roll Forward journal
  7266.  1Bh    "SQLFSRF" start Roll Forward journal
  7267.  1Ch    "SQLFSTO" store a compiled SQL command
  7268.  1Dh    "SQLFRET" retrieve a compiled SQL command
  7269.  1Eh    "SQLFDST" drop a stored command
  7270.  1Fh    "SQLFCTY" get command type
  7271.  20h    "SQLFEPO" get error position
  7272.  21h    "SQLFGNR" get number of rows
  7273.  22h    "SQLFNSI" get number of select items
  7274.  23h    "SQLFRBF" get Roll Back flag
  7275.  24h    "SQLFRCD" get return code
  7276.  25h    "SQLFROW" get number of ROWs
  7277.  26h    "SQLFSCN" set cursor name
  7278.  27h    "SQLFSIL" set isolation level
  7279.  28h    "SQLFSLP" set log parameters
  7280.  29h    "SQLFSSB" set select buffer
  7281.  2Ah    "SQLFSSS" set sort space
  7282.  2Bh    "SQLFRLO" read long
  7283.  2Ch    "SQLFWLO" write long
  7284.  2Dh    "SQLFLSK" long seek
  7285.  2Eh    "SQLFGLS" get long size
  7286.  2Fh    "SQLFELO" end long operation
  7287.  30h    "SQLFRBK" roll back a transaction from the database
  7288.  31h    "SQLFERR" error message
  7289.  32h    "SQLFCPY" copy
  7290.  33h    "SQLFR01" reserved
  7291.  34h    "SQLFSYS" system
  7292.  35h    "SQLFSTA" statistics
  7293.  36h    "SQLFR02" reserved
  7294.  37h    "SQLFXAD" extra add
  7295.  38h    "SQLFXCN" extra character to number
  7296.  39h    "SQLFXDA" extra date add
  7297.  3Ah    "SQLFXDP" extra date picture
  7298.  3Bh    "SQLFXDV" extra divide
  7299.  3Ch    "SQLFXML" extra multiply
  7300.  3Dh    "SQLFXNP" extra number picture
  7301.  3Eh    "SQLFXPD" extra picture date
  7302.  3Fh    "SQLFXSB" extra subtract
  7303.  40h    "SQLFINS" install database
  7304.  41h    "SQLFDIN" deinstall database
  7305.  42h    "SQLFDIR" directory of databases
  7306.  43h    "SQLFTIO" timeout
  7307.  44h    "SQLFFQN" get fully qualified column name
  7308.  45h    "SQLFEXP" explain execution plan
  7309.  46h    "SQLFFER" get full error
  7310.  47h    "SQLFBKP" begin online backup
  7311.  48h    "SQLFRDC" read backup data chunk
  7312.  49h    "SQLFEBK" end backup
  7313.  4Ah    "SQLFRES" begin restore from backup
  7314.  4Bh    "SQLFWDC" write backup data chunk for restore
  7315.  4Ch    "SQLFRRD" recover restored database to consistent state
  7316.  4Dh    "SQLFERS" end restore
  7317.  4Eh    "SQLFNRR" return number of result set rows
  7318.  4Fh    "SQLFSTR" start restriction mode
  7319.  50h    "SQLFSPR" stop restriction mode
  7320.  51h    "SQLFCNC" connect 2
  7321.  52h    "SQLFCNR" connect with no recovery
  7322.  53h    "SQLFOMS" set output message size
  7323.  54h    "SQLFIMS" set input message size
  7324.  55h    "SQLFSCP" set cache pages
  7325.  56h    "SQLFDSC" describe items of a SELECT statement (external)
  7326.  57h    "SQLFLAB" get label info for items in SELECT statement
  7327.  58h    "SQLFCBV" clear bind variables
  7328.  59h    "SQLFGET" get database information
  7329.  5Ah    "SQLFSET" set database information
  7330.  5Bh    "SQLFTEC" translate error code
  7331. ----------478001-----------------------------
  7332. INT 47 - SQL Base - GET VERSION NUMBER
  7333.     AX = 8001h
  7334. Return: ???
  7335. Note:    SQL Base is a network-oriented database engine by Gupta Technologies
  7336. ----------48---------------------------------
  7337. INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr)
  7338. SeeAlso: INT 49"PCjr"
  7339. ----------48---------------------------------
  7340. INT 48 - Z100 - Slave 8259 - S100 vectored line 0
  7341. SeeAlso: INT 49"Z100"
  7342. ----------49---------------------------------
  7343. INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr)
  7344. SeeAlso: INT 48"PCjr"
  7345.  
  7346. Format of translation table:
  7347. Offset    Size    Description
  7348.  00h    BYTE    number of nonkeyboard scancodes in the table
  7349.  01h  N WORDs    high byte 00h (NUL) byte scancode with low order byte
  7350.         representing the scancode mapped values relative to their
  7351.         input values within the range of 56h through 7Eh
  7352. ----------49---------------------------------
  7353. INT 49 - Z100 - Slave 8259 - S100 vectored line 1
  7354. SeeAlso: INT 48"Z100",INT 4A"Z100"
  7355. ----------49---------------------------------
  7356. INT 49 - Texas Instruments PC - VIDEO I/O???
  7357.     apparently provides direct video display on the TI Professional PC
  7358. ----------490001-----------------------------
  7359. INT 49 - MAGic v1.16+ - TURN ON MAGNIFICATION
  7360.     AX = 0001h
  7361. Return: AX = status
  7362.         0000h cannot magnify current video mode
  7363.         0002h magnified (text mode)
  7364.         0003h magnified (graphics mode)
  7365.         FFFDh function works only in magnified mode
  7366.         FFFFh MAGic busy, retry later
  7367.     BX,CX,DX destroyed
  7368. Notes:    MAGic (MAGnification In Color) is a TSR by Microsystems Software, Inc.
  7369.       providing 2x2 text and graphics magnification on VGA, XGA, and SVGA
  7370.     INT 49 is the default, but may be overridden on the commandline.  The
  7371.       actual interrupt in use may be found be searching for the signature
  7372.       "MAGic" immediately preceding the interrupt handler (this is also
  7373.       the installation check).  MAGic uses CodeRunneR, which places the
  7374.       signature "RT" at offset 0000h in the interrupt handler's segment,
  7375.       followed by MAGic's TSR ID of "VMAG".
  7376. SeeAlso: AX=0001h,AX=0003h,AX=0004h
  7377. ----------490002-----------------------------
  7378. INT 49 - MAGic v1.16+ - TURN OFF MAGNIFICATION
  7379.     AX = 0002h
  7380. Return: AX = status (see AX=0001h)
  7381.     BX,CX,DX destroyed
  7382. SeeAlso: AX=0001h
  7383. ----------490003-----------------------------
  7384. INT 49 - MAGic v1.16+ - SHIFT MAGNIFIED WINDOW TO INCLUDE SPECIFIED LOCATION
  7385.     AX = 0003h
  7386.     BX = vertical position (character row [text] or pixel row [graphics])
  7387.     DX = horizontal position (char column [text] or 8-pixel units [gr])
  7388. Return: AX = status
  7389.         0000h successful
  7390.         FFFFh MAGic busy, retry later
  7391.     BX,CX,DX destroyed
  7392. Note:    window is not moved if the position is inside the current window
  7393. SeeAlso: AX=0001h,AX=0004h,AX=0005h
  7394. ----------490004-----------------------------
  7395. INT 49 - MAGic v1.16+ - REPOSITION MAGNIFIED WINDOW
  7396.     AX = 0004h
  7397.     BX = vertical position of upper left corner
  7398.     DX = horizontal position
  7399. Return: AX = status (see AX=0003h)
  7400.     BX,CX,DX destroyed
  7401. SeeAlso: AX=0001h,AX=0003h,AX=0005h
  7402. ----------490005-----------------------------
  7403. INT 49 - MAGic v1.16+ - GET POSITION OF MAGNIFIED WINDOW
  7404.     AX = 0005h
  7405. Return: AX = status
  7406.         0000h successful
  7407.             BX = vertical position (char row or pixel row)
  7408.         DX = horizontal position (char column or 8-pixel units)
  7409.         FFFFh MAGic busy, retry later
  7410.         BX,DX destroyed
  7411.     CX destroyed
  7412. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0006h,AX=0007h
  7413. ----------490006-----------------------------
  7414. INT 49 - MAGic v1.16+ - GET SIZE OF FULL SCREEN
  7415.     AX = 0006h
  7416. Return: AX = status
  7417.         0000h successful
  7418.             BX = vertical size (char rows or pixel rows)
  7419.         DX = horizontal size (char cols or 8-pixel units)
  7420.         FFFFh MAGic busy, retry later
  7421.         BX,DX destroyed
  7422.     CX destroyed
  7423. SeeAlso: AX=0001h,AX=0005h,AX=0007h
  7424. ----------490007-----------------------------
  7425. INT 49 - MAGic v1.16+ - GET SIZE OF MAGIFICATION WINDOW
  7426.     AX = 0007h
  7427. Return: AX = status
  7428.         0000h successful
  7429.         BX = vertical size (char rows or pixel rows)
  7430.         DX = horizontal size (char cols or 8-pixel units)
  7431.         FFFEh invalid function
  7432.         FFFFh MAGic busy, retry later
  7433.         BX,DX destroyed
  7434.     CX destroyed
  7435. BUG:    in v1.16 and v1.17, this function is not recognized as valid, but
  7436.       AX=0000h is accepted and will branch into hyperspace
  7437. SeeAlso: AX=0001h,AX=0006h
  7438. ----------4A---------------------------------
  7439. INT 4A - SYSTEM - USER ALARM HANDLER
  7440.    This interrupt is invoked by the BIOS when a real-time clock alarm occurs.
  7441.    An application may use it to perform an action at a predetermined time;
  7442.    however, this interrupt is called from within a hardware interrupt handler,
  7443.    so all usual precautions against reentering DOS must be taken.
  7444. SeeAlso: INT 1A/AH=06h
  7445. ----------4A---------------------------------
  7446. INT 4A - Z100 - Slave 8259 - S100 vectored line 2
  7447. SeeAlso: INT 49"Z100",INT 4B"Z100"
  7448. ----------4B---------------------------------
  7449. INT 4B - Z100 - Slave 8259 - S100 vectored line 3
  7450. SeeAlso: INT 4A"Z100",INT 4C"Z100"
  7451. ----------4B---------------------------------
  7452. INT 4B - Common Access Method SCSI interface (draft revision 1.9)
  7453.     ES:DI -> CAM Control Block (see INT 4F/AX=8100h)
  7454. Notes:    the CAM committee moved the interface to INT 4F after revision 1.9
  7455.       to avoid conflicting with the IBM SCSI interface and the Virtual
  7456.       DMA specification
  7457.     the installation check for the driver is the string "SCSI_CAM" eight
  7458.       bytes past the INT 4Bh handler
  7459.     it is not known whether any drivers actually implemented this
  7460.       interface on INT 4B instead of INT 4F
  7461. SeeAlso: INT 4F/AX=8100h
  7462. ----------4B80-------------------------------
  7463. INT 4B - IBM SCSI interface
  7464.     AH = 80h
  7465.     details not yet available
  7466. ----------4B8102DX0000-----------------------
  7467. INT 4B - Virtual DMA Specification (VDS) - GET VERSION
  7468.     AX = 8102h
  7469.     DX = 0000h
  7470. Return: CF clear if successful
  7471.         AH = major version number
  7472.         AL = minor version number
  7473.         BX = product number
  7474.         CX = product revision number
  7475.         SI:DI = maximum DMA buffer size
  7476.         DX = flags
  7477.         bit 0: PC/XT bus (DMA in first megabyte only)
  7478.             1: physical buffer/remap region in first megabyte
  7479.             2: automatic remap enabled
  7480.             3: all memory is physically contiguous
  7481.          4-15: reserved (zero)
  7482.     CF set on error
  7483.         AL = error code (see below)
  7484. Note:    bit 5 of 0040h:007Bh is supposed to be set if VDS is supported; this is
  7485.       apparently not always the case
  7486. SeeAlso: INT 31
  7487.  
  7488. Values for error code:
  7489.  01h    region not in contiguous memory
  7490.  02h    region crossed a physical alignment boundary
  7491.  03h    unable to lock pages
  7492.  04h    no buffer available
  7493.  05h    region too large for buffer
  7494.  06h    buffer currently in use
  7495.  07h    invalid memory region
  7496.  08h    region was not locked
  7497.  09h    number of physical pages greater than table length
  7498.  0Ah    invalid buffer ID
  7499.  0Bh    copy out of buffer range
  7500.  0Ch    invalid DMA channel number
  7501.  0Dh    disable count overflow
  7502.  0Eh    disable count underflow
  7503.  0Fh    function not supported
  7504.  10h    reserved flag bits set in DX
  7505.  
  7506. Format of DMA descriptor structure (DDS):
  7507. Offset    Size    Description
  7508.  00h    DWORD    region size
  7509.  04h    DWORD    offset
  7510.  08h    WORD    segment/selector
  7511.  0Ah    WORD    buffer ID
  7512.  0Ch    DWORD    physical address
  7513.  
  7514. Format of Extended DMA descriptor structure (EDDS):
  7515. Offset    Size    Description
  7516.  00h    DWORD    region size
  7517.  04h    DWORD    offset
  7518.  08h    WORD    segment/selector
  7519.  0Ah    WORD    reserved
  7520.  0Ch    WORD    number available
  7521.  0Eh    WORD    number used
  7522.  10h    DWORD    region 0 physical address
  7523.  14h    DWORD    region 0 size in bytes
  7524.  18h    DWORD    region 1 physical address
  7525.  1Ch    DWORD    region 1 size in bytes
  7526.     ...
  7527.  
  7528. Format of Extended DMA descriptor structure (EDDS) with page table entries:
  7529. Offset    Size    Description
  7530.  00h    DWORD    region size
  7531.  04h    DWORD    offset
  7532.  08h    WORD    segment/selector
  7533.  0Ah    WORD    reserved
  7534.  0Ch    WORD    number available
  7535.  0Eh    WORD    number used
  7536.  10h    DWORD    page table entry 0 (same as 80386 page table entry)
  7537.  14h    DWORD    page table entry 1
  7538.     ...
  7539. Note:    bits 1-12 of the page table entries should be zero; bit 0 set if page
  7540.       is present and locked
  7541. ----------4B8103-----------------------------
  7542. INT 4B - Virtual DMA Specification - LOCK DMA REGION
  7543.     AX = 8103h
  7544.     DX = flags
  7545.         bit 0: reserved (zero)
  7546.         1: data should be copied into buffer (ignored if bit 2 set)
  7547.         2: buffer should not be allocated if region noncontiguous or
  7548.            crosses physical alignment boundary specified by bits 4-5
  7549.         3: don't attempt automatic remap
  7550.         4: region must not cross 64K physical alignment boundary
  7551.         5: region must not cross 128K physical alignment boundary
  7552.          6-15: reserved (zero)
  7553.     DS:SI -> DMA descriptor structure (see AX=8102h)
  7554. Return:    CF clear if successful
  7555.         DDS physical address field filled in
  7556.         DDS buffer ID field filled (0000h if no buffer allocated)
  7557.     CF set on error
  7558.         AL = error code (see AX=8102h)
  7559.         DDS region size field filled wth maximum contiguous length in bytes
  7560. SeeAlso: AX=8104h,AX=8105h
  7561. ----------4B8104-----------------------------
  7562. INT 4B - Virtual DMA Specification - UNLOCK DMA REGION
  7563.     AX = 8104h
  7564.     DX = flags
  7565.         bit 0: reserved (zero)
  7566.         1: data should be copied out of buffer
  7567.          2-15: reserved (zero)
  7568.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size,
  7569.         physical address, and buffer ID fields set
  7570. Return: CF clear if successful
  7571.         DDS physical address field set
  7572.         DDS buffer ID field set (0000h if no buffer allocated)
  7573.     CF set on error
  7574.         AL = error code (see AX=8102h)
  7575.         DDS region size field filled wth maximum contiguous length in bytes
  7576. SeeAlso: AX=8103h,AX=8106h
  7577. ----------4B8105-----------------------------
  7578. INT 4B - Virtual DMA Specification - SCATTER/GATHER LOCK REGION
  7579.     AX = 8105h
  7580.     DX = flags
  7581.         bits 0-5: reserved (zero)
  7582.            6: EDDS should be returned with page table entries
  7583.            7: only present pages should be locked (not-present pages
  7584.             receive entry of 0000h)
  7585.         8-15: reserved (zero)
  7586.     ES:DI -> Extended DMA descriptor structure (see AX=8102h)
  7587.         region size, linear segment, linear offset, and number avail
  7588.         fields set
  7589. Return: CF clear if successful
  7590.         EDDS number used field set
  7591.         if DX bit 6 set, lower 12 bits of BX = offset in first page
  7592.     CF set on error
  7593.         AL = error code (see AX=8102h)
  7594.         EDDS region size field filled with max length in bytes that can be
  7595.         locked and described in the EDDS table
  7596. SeeAlso: AX=8103h,AX=8106h
  7597. ----------4B8106-----------------------------
  7598. INT 4B - Virtual DMA Specification - SCATTER/GATHER UNLOCK REGION
  7599.     AX = 8106h
  7600.     DX = flags
  7601.         bits 0-5: reserved (zero)
  7602.            6: EDDS contains page table entries
  7603.            7: EDDS may contain not-present pages (entry = 0000h)
  7604.         8-15: reserved (zero)
  7605.     ES:DI -> Extended DMA descriptor structure (see AX=8102h) returned
  7606.         by AX=8105h    
  7607. Return: CF clear if successful
  7608.     CF set on error
  7609.         AL = error code (see AX=8102h)
  7610. SeeAlso: AX=8104h,AX=8105h
  7611. ----------4B8107-----------------------------
  7612. INT 4B - Virtual DMA Specification - REQUEST DMA BUFFER
  7613.     AX = 8107h
  7614.     DX = flags
  7615.         bit 0: reserved (zero)
  7616.         1: data should be copied into buffer
  7617.          2-15: reserved (zero)
  7618.     ES:DI -> DMA descriptor structure (see AX=8102h) with region size set
  7619.         (also region offset and region segment if DX bit 1 set)
  7620. Return: CF clear if successful
  7621.         DDS physical address and buffer ID set
  7622.         DDS region size filled with length of buffer
  7623.     CF set on error
  7624.         AL = error code (see AX=8102h)
  7625. SeeAlso: AX=8108h
  7626. ----------4B8108-----------------------------
  7627. INT 4B - Virtual DMA Specification - RELEASE DMA BUFFFER
  7628.     AX = 8108h
  7629.     DX = flags
  7630.         bit 0: reserved (zero)
  7631.         1: data should be copied out of buffer
  7632.          2-15: reserved (zero)
  7633.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID set
  7634.         (also region size/region offset/segment if DX bit 1 set)
  7635. Return: CF clear if successful
  7636.     CF set on error
  7637.         AL = error code (see AX=8102h)
  7638. SeeAlso: AX=8107h
  7639. ----------4B8109DX0000-----------------------
  7640. INT 4B - Virtual DMA Specification - COPY INTO DMA BUFFER
  7641.     AX = 8109h
  7642.     DX = 0000h
  7643.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  7644.         region segment/offset, and region size fields set
  7645.     BX:CX = starting offset into DMA buffer
  7646. Return: CF clear if successful
  7647.     CF set on error
  7648.         AL = error code (see AX=8102h)
  7649. SeeAlso: AX=810Ah
  7650. ----------4B810ADX0000-----------------------
  7651. INT 4B - Virtual DMA Specification - COPY OUT OF DMA BUFFER
  7652.     AX = 810Ah
  7653.     DX = 0000h
  7654.     ES:DI -> DMA descriptor structure (see AX=8102h) with buffer ID,
  7655.         region segment/offset, and region size fields set
  7656.     BX:CX = starting offset into DMA buffer
  7657. Return: CF clear if successful
  7658.     CF set on error
  7659.         AL = error code (see AX=8102h)
  7660. SeeAlso: AX=8109h
  7661. ----------4B810B-----------------------------
  7662. INT 4B - Virtual DMA Specification - DISABLE DMA TRANSLATION
  7663.     AX = 810Bh
  7664.     BX = DMA channel number
  7665.     DX = 0000h
  7666. Return: CF clear if successful
  7667.     CF set on error
  7668.         AL = error code (see AX=8102h)
  7669. SeeAlso: AX=810Ch
  7670. ----------4B810C-----------------------------
  7671. INT 4B - Virtual DMA Specification - ENABLE DMA TRANSLATION
  7672.     AX = 810Ch
  7673.     BX = DMA channel number
  7674.     DX = 0000h
  7675. Return: CF clear if successful
  7676.         ZF set if disable count decremented to zero
  7677.     CF set on error
  7678.         AL = error code (see AX=8102h)
  7679. SeeAlso: AX=810Bh
  7680. ----------4C---------------------------------
  7681. INT 4C - Z100 - Slave 8259 - S100 vectored line 4
  7682. SeeAlso: INT 4B"Z100",INT 4D"Z100"
  7683. ----------4D---------------------------------
  7684. INT 4D - Z100 - Slave 8259 - S100 vectored line 5
  7685. SeeAlso: INT 4C"Z100",INT 4E"Z100"
  7686. ----------4E---------------------------------
  7687. INT 4E - TI Professional PC - DISK I/O
  7688.     used instead of INT 13 on the TI Professional PC
  7689. SeeAlso: INT 13
  7690. ----------4E---------------------------------
  7691. INT 4E - Z100 - Slave 8259 - S100 vectored line 6
  7692. SeeAlso: INT 4D"Z100",INT 4F"Z100"
  7693. ----------4F---------------------------------
  7694. INT 4F - Z100 - Slave 8259 - S100 vectored line 7
  7695. SeeAlso: INT 4E"Z100"
  7696. ----------4F8100-----------------------------
  7697. INT 4F - Common Access Method SCSI interface rev 2.3 - SEND CCB TO XPT/SIM
  7698.     AX = 8100h
  7699.     ES:BX -> CAM Control Block (CCB) (see below)
  7700. Return: AH = status
  7701.         00h successful
  7702.         01h invalid CCB address (0000h:0000h)
  7703. Note:    the SCSI Interface Module (SIM) may complete the requested function
  7704.       and invoke the completion callback function before this call returns
  7705. SeeAlso: AX=8200h,INT 4B"Common Access Method"
  7706.  
  7707. Format of CAM Control Block:
  7708. Offset    Size    Description
  7709.  00h    DWORD    physical address of this CCB
  7710.  04h    WORD    CAM control block length
  7711.  06h    BYTE    function code (see below)
  7712.  07h    BYTE    CAM status (see below)
  7713.  08h    BYTE    SCSI status
  7714.  09h    BYTE    path ID (FFh = XPT)
  7715.  0Ah    BYTE    target ID
  7716.  0Bh    BYTE    logical unit number
  7717.  0Ch    BYTE    CAM flags
  7718.         bits 7-6: direction
  7719.             00 reserved
  7720.             01 in
  7721.             10 out
  7722.             11 no data transfer
  7723.         bit 5: disable autosense
  7724.             4: scatter/gather
  7725.             3: disable callback on completion
  7726.             2: linked CDB
  7727.             1: tagged queue action enable
  7728.             0: CDB is a pointer
  7729.  0Dh    BYTE    CAM flags
  7730.         bit 7: disable disconnect
  7731.             6: initiate synchronous transfers  \ mutually
  7732.             5: disable synchronous transfers   / exclusive
  7733.             4: SIM queue priority
  7734.             1 head insertion
  7735.             0 tail insertion (normal)
  7736.         bit 3: SIM queue freeze
  7737.             2: engine synchronize
  7738.         bits 1-0: reserved
  7739.  0Eh    BYTE    CAM address flags
  7740.         bit 7: SG list/data (0 = host, 1 = engine)
  7741.         bit 6: CDB pointer    (bits 6-1: 0=virtual addr, 1=phys addr)
  7742.         bit 5: SG list/data
  7743.         bit 4: sense buffer
  7744.         bit 3: message buffer
  7745.         bit 2: next CCB
  7746.         bit 1: callback on completion
  7747.         bit 0: reserved
  7748.  0Fh    BYTE    target-mode flags
  7749.         bit 7: data buffer valid
  7750.         bit 6: status valid
  7751.         bit 5: message buffer valid
  7752.         bit 4: reserved
  7753.         bit 3: phase-cognizant mode
  7754.         bit 2: target CCB available
  7755.         bit 1: disable autodisconnect
  7756.         bit 0: disable autosave/restore
  7757. ---function 02h---
  7758.  10h    DWORD    pointer to 36-byte buffer for inquiry data or 0000h:0000h
  7759.  14h    BYTE    peripheral device type of target logical unit number
  7760. ---function 03h---
  7761.  10h    BYTE    version number (00h-07h prior to rev 1.7, 08h = rev 1.7,
  7762.          09h-FFh = rev no, i.e. 23h = rev 2.3)
  7763.  11h    BYTE    SCSI capabilities
  7764.          bit 7: modify data pointers
  7765.             6: wide bus (32 bits)
  7766.             5: wide bus (16 bits)
  7767.             4: synchronous transfers
  7768.             3: linked commands
  7769.             2: reserved
  7770.             1: tagged queueing
  7771.             0: soft reset
  7772.  12h    BYTE    target mode support
  7773.          bit 7: processor mode
  7774.             6: phase-cognizant mode
  7775.             5-0: reserved
  7776.  13h    BYTE    miscellaneous flags
  7777.          bit 7: scanned high to low instead of low to high
  7778.             6: removables not included in scan
  7779.             5: inquiry data not kept by XPT
  7780.             4-0: reserved
  7781.  14h    WORD    engine count
  7782.  16h 14 BYTEs    vendor-specific data
  7783.  24h    DWORD    size of private data area
  7784.  28h    DWORD    asynchronous event capabilities
  7785.          bits 31-24: vendor-specific
  7786.              23-8: reserved
  7787.                 7: new devices found during rescan
  7788.             6: SIM module deregistered
  7789.             5: SIM module registered
  7790.             4: sent bus device reset to target
  7791.             3: SCSI AEN
  7792.             2: reserved
  7793.             1: unsolicited reselection
  7794.             0: unsolicited SCSI bus reset
  7795.  2Ch    BYTE    highest path ID assigned
  7796.  2Dh    BYTE    SCSI device ID of initiator
  7797.  2Eh  2 BYTEs    reserved
  7798.  30h 16 BYTEs    SIM vendor ID
  7799.  40h 16 BYTEs    HBA (host bus adaptor) vendor ID
  7800.  50h  4 BYTEs    operating-system dependant usage
  7801. ---functions 00h,04h,11h,12h---
  7802.  no additional fields
  7803. ---function 05h---
  7804.  10h    DWORD    asynchronous event enables (see CAM function 03h above)
  7805.  14h    DWORD    pointer to asynchronous callback routine
  7806.  18h    DWORD    pointer to peripheral driver buffer
  7807.  1Ch    BYTE    size of peripheral buffer
  7808. ---function 06h---
  7809.  10h    BYTE    peripheral device type of target
  7810. ---functions 10h,13h---
  7811.  10h    DWORD    pointer to CCB to be aborted
  7812. ---function 20h---
  7813.  10h    WORD    engine number
  7814.  12h    BYTE    engine type
  7815.          00h buffer memory
  7816.         01h lossless compression
  7817.         02h lossy compression
  7818.         03h encryption
  7819.  13h    BYTE    engine algorithm ID
  7820.          00h vendor-unique
  7821.         01h LZ1 variation 1 (STAC)
  7822.         02h LZ2 variation 1 (HP DCZL)
  7823.         03h LZ2 variation 2 (Infochip)
  7824.  14h    DWORD    engine memory size
  7825. ---function 21h---
  7826.  10h    DWORD    pointer to peripheral driver
  7827.  14h  4 BYTEs    reserved
  7828.  18h    DWORD    OS-dependent request-mapping info
  7829.  1Ch    DWORD    address of completion callback routine
  7830.  20h    DWORD    pointer to scatter/gather list or data buffer
  7831.  24h    DWORD    length of data transfer
  7832.  28h    DWORD    pointer to engine buffer data
  7833.  2Ch  2 BYTEs    reserved
  7834.  2Eh    WORD    number of scatter/gather entries
  7835.  30h    DWORD    maximum destination data length
  7836.  34h    DWORD    length of destination data
  7837.  38h    DWORD    source residual length
  7838.  3Ch 12 BYTEs    reserved
  7839.  48h    DWORD    OS-dependent timeout value
  7840.  4Ch  4 BYTEs    reserved
  7841.  50h    WORD    engine number
  7842.  52h    WORD    vendor-unique flags
  7843.  54h  4 BYTEs    reserved
  7844.  58h  N BYTEs    private data area for SIM
  7845. ---function 30h---
  7846.  10h    WORD    group 6 vendor-unique CDB length
  7847.  12h    WORD    group 7 vendor-unique CDB length
  7848.  14h    DWORD    pointer to target CCB list
  7849.  18h    WORD    number of target CCBs
  7850. ---other functions---
  7851.  10h    DWORD    pointer to peripheral driver
  7852.  14h    DWORD    pointer to next CCB
  7853.  18h    DWORD    OS-dependent request mapping information
  7854.  1Ch    DWORD    address of completion callback routine
  7855.  20h    DWORD    pointer to scatter/gather list or data buffer
  7856.  24h    DWORD    length of data transfer
  7857.  28h    DWORD    pointer to sense info buffer
  7858.  2Ch    BYTE    length of sense info buffer
  7859.  2Dh    BYTE    CDB length
  7860.  2Eh    WORD    number of scatter/gather entries
  7861.  30h  4 BYTEs    reserved
  7862.  34h    BYTE    SCSI status
  7863.  35h  3 BYTEs    reserved
  7864.  38h    DWORD    residual length
  7865.  40h 12 BYTEs    Command Descriptor Block (CDB)
  7866.  44h    DWORD    OS-dependent timeout value
  7867.  48h    DWORD    pointer to message buffer
  7868.  4Ch    WORD    length of message buffer
  7869.  4Eh    WORD    vendor-unique flags
  7870.  50h    BYTE    tag queue action
  7871.  51h  3 BYTEs    reserved
  7872.  54h  N BYTEs    private data area for SIM
  7873.  
  7874. Values for CAM function code:
  7875.  00h NOP
  7876.  01h execute SCSI I/O
  7877.  02h get device type
  7878.  03h path inquiry
  7879.  04h release SIM queue
  7880.  05h set async callback
  7881.  06h set device type
  7882.  07h-0Fh reserved
  7883.  10h abort SCSI command
  7884.  11h reset SCSI bus
  7885.  12h reset SCSI device
  7886.  13h terminate I/O process
  7887.  14h-1Fh reserved
  7888.  20h engine inquiry
  7889.  21h execute engine request
  7890.  22h-2Fh reserved
  7891.  30h enable logical unit number
  7892.  31h execute target I/O
  7893.  32h-7Fh reserved
  7894.  80h-FFh vendor-specific functions
  7895.  
  7896. Values for CAM status:
  7897.  00h request in progress
  7898.  01h request successful
  7899.  02h host aborted request
  7900.  03h unable to abort request
  7901.  04h request completed with error
  7902.  05h CAM is busy
  7903.  06h invalid request
  7904.  07h invalid path ID
  7905.  08h no such SCSI device
  7906.  09h unable to terminate I/O process
  7907.  0Ah timeout on target selection
  7908.  0Bh timeout on command
  7909.  0Dh receive message rejection
  7910.  0Eh sent/received SCSI bus reset
  7911.  0Fh detected uncorrectable parity error
  7912.  10h Autosense request failed
  7913.  11h no HBA detected
  7914.  12h data over/underrun
  7915.  13h bus freed unexpectedly
  7916.  14h target bus phase sequence failure
  7917.  15h CCB too small
  7918.  16h requested capability not available
  7919.  17h sent bus device reset
  7920.  18h terminate I/O process
  7921.  38h invalid LUN
  7922.  39h invalid target ID
  7923.  3Ah unimplemented function
  7924.  3Bh nexus not established
  7925.  3Ch invalid initiator ID
  7926.  3Dh received SCSI Command Descriptor Block
  7927.  3Eh LUN already enabled
  7928.  3Fh SCSI bus busy
  7929. Note:    bit 6 set to indicate frozen SIM queue
  7930.     bit 7 set to indicate valid autosense
  7931.  
  7932. Completion callback function called with:
  7933.     interrupts disabled
  7934.     ES:BX -> completed CCB
  7935.  
  7936. Asynchronous callback function called with:
  7937.     AH = opcode
  7938.     AL = path ID generating callback
  7939.     DH = target ID causing event
  7940.     DL = LUN causing event
  7941.     CX = data byte count (if applicable)
  7942.     ES:BX -> data buffer (if applicable)
  7943. Return: all registers preserved
  7944. ----------4F8200CX8765-----------------------
  7945. INT 4F - Common Access Method SCSI interface rev 2.3 - INSTALLATION CHECK
  7946.     AX = 8200h
  7947.     CX = 8765h
  7948.     DX = CBA9h
  7949. Return: AH = 00h if installed
  7950.         CX = 9ABCh
  7951.         DX = 5678h
  7952.         ES:DI -> "SCSI_CAM"
  7953. SeeAlso: AX=8100h,INT 4B"Common Access Method"
  7954. ----------50---------------------------------
  7955. INT 50 - TIL Xpert AIM (X.25)
  7956.     AH = function
  7957. ----------50---------------------------------
  7958. INT 50 - through 57 - IRQ0-IRQ7 relocated by DESQview
  7959. Notes:    this is the default location; DV 2.26+ searches for unused ranges of
  7960.       interrupts and uses the lowest available range in its list for
  7961.       relocating these IRQs and the next lowest for relocating IRQ8-IRQ15
  7962.     a range of eight interrupts starting at a multiple of 8 is considered
  7963.       available if all vectors are identical
  7964.     the list of ranges for v2.26 is 50h,58h,68h,78h,F8h (if none of these
  7965.       are available, F8h and then 50h are used anyway)
  7966.     the list of ranges for v2.31 is 68h,78h,88h-B8h,F8h (if none of these
  7967.       are available, F8h and then F0h are used anyway)
  7968. SeeAlso: INT 58"DESQview"
  7969. ----------50---------------------------------
  7970. INT 50 - through 57 - IRQ0-IRQ7 relocated by IBM 3278 emulation control program
  7971. ----------50---------------------------------
  7972. INT 50 - through 57 - IRQ0-IRQ7 relocated by OS/2 v1.x
  7973. ----------58---------------------------------
  7974. INT 58 - IRQ8 relocated by DESQview 2.26+
  7975. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  7976. SeeAlso: INT 50"DESQview",INT 70
  7977. ----------58---------------------------------
  7978. INT 58 - IRQ0 relocated by DoubleDOS
  7979. SeeAlso: INT 08
  7980. ----------59---------------------------------
  7981. INT 59 - IRQ9 relocated by DESQview 2.26+
  7982. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  7983. SeeAlso: INT 50"DESQview",INT 71
  7984. ----------59---------------------------------
  7985. INT 59 - IRQ1 relocated by DoubleDOS
  7986. SeeAlso: INT 09
  7987. ----------59---------------------------------
  7988. INT 59 - GSS Computer Graphics Interface (GSS*CGI)
  7989.     DS:DX -> block of 5 array pointers
  7990. Return:    CF set on error
  7991.         AX = error code
  7992.     CF clear if successful
  7993.         AX = return code
  7994. Note:    INT 59 is the means by which GSS*CGI language bindings communicate with
  7995.       GSS*CGI device drivers and the GSS*CGI device driver controller.
  7996.     also used by the IBM Graphic Development Toolkit
  7997. ----------5A---------------------------------
  7998. INT 5A - IRQ10 relocated by DESQview 2.26+
  7999. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  8000. SeeAlso: INT 50"DESQview",INT 72
  8001. ----------5A---------------------------------
  8002. INT 5A - IRQ2 relocated by DoubleDOS
  8003. SeeAlso: INT 0A
  8004. ----------5A---------------------------------
  8005. INT 5A - Cluster adapter BIOS entry address
  8006.     ???
  8007. ----------5B---------------------------------
  8008. INT 5B - IRQ11 relocated by DESQview 2.26+
  8009. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  8010. SeeAlso: INT50"DESQview",INT 73
  8011. ----------5B---------------------------------
  8012. INT 5B - IRQ3 relocated by DoubleDOS
  8013. SeeAlso: INT 0B
  8014. ----------5B---------------------------------
  8015. INT 5B - Used by cluster adapter
  8016. ----------5B---------------------------------
  8017. INT 5B - AT&T Starlan Extended NetBIOS (variable length names)
  8018.     ES:BX -> Network Control Block (see below)
  8019. Return: AL = status (see INT 5C)
  8020. SeeAlso: INT 5C
  8021.  
  8022. Format of Network Control Block
  8023. Offset    Size    Description
  8024.  00h    BYTE    ncb_command (see below)
  8025.  01h    BYTE    ncb_retcode
  8026.  02h    BYTE    ncb_lsn
  8027.  03h    BYTE    ncb_num
  8028.  04h    DWORD    -> ncb_buffer
  8029.  08h    WORD    ncb_length
  8030.  0Ah 16 BYTEs    ncb_callname
  8031.  1Ah 16 BYTEs    ncb_name
  8032.  2Ah    BYTE    ncb_rto
  8033.  2Bh    BYTE    ncb_sto
  8034.  2Ch    DWORD    -> ncb_post    /* int (far *ncb_post)(); */
  8035.  30h    BYTE    ncb_lana_num
  8036.  31h    BYTE    ncb_cmd_cplt
  8037.  32h    DWORD    -> ncb_vname
  8038.  36h    BYTE    ncb_vnamelen
  8039.  37h  9 BYTEs    ncb_reserve
  8040. Note: fields 00h-31h are the same as for a standard NetBIOS NCB (see INT 5C)
  8041.  
  8042. Values for ncb_command field same as for INT 5C, except
  8043.     70h    send net Break
  8044. ----------5B---------------------------------
  8045. INT 5B - Microsoft Network Transport Layer Interface
  8046. Note:    used by MS-NET for executing network commands
  8047. SeeAlso: INT 5C"NetBIOS"
  8048. ----------5B---------------------------------
  8049. INT 5B - used by Alloy NTNX
  8050. ----------5C---------------------------------
  8051. INT 5C - IRQ12 relocated by DESQview 2.26+
  8052. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  8053. SeeAlso: INT 50"DESQview",INT 74
  8054. ----------5C---------------------------------
  8055. INT 5C - IRQ4 relocated by DoubleDOS
  8056. SeeAlso: INT 0C
  8057. ----------5C---------------------------------
  8058. INT 5C - NetBIOS INTERFACE
  8059.     ES:BX -> network control block (NCB) (see below)
  8060. Return: AL = status
  8061.         00h successful
  8062.         01h bad buffer size
  8063.         03h invalid NETBIOS command
  8064.         05h timeout
  8065.         06h receive buffer too small
  8066.         07h No-ACK command failed
  8067.         08h bad session number
  8068.         09h LAN card out of memory
  8069.         0Ah session closed
  8070.         0Bh command has been cancelled
  8071.         0Dh name already exists
  8072.         0Eh local name table full
  8073.         0Fh name still in use, can't delete
  8074.         11h local session table full
  8075.         12h remote PC not listening
  8076.         13h bad NCB_NUM field
  8077.         14h no answer to CALL or no such remote
  8078.         15h name not in local name table
  8079.         16h duplicate name
  8080.         17h bad delete
  8081.         18h abnormal end
  8082.         19h name error, multiple identical names in use
  8083.         1Ah bad packet
  8084.         21h network card busy
  8085.         22h too many commands queued
  8086.         23h bad LAN card number
  8087.         24h command finished while cancelling
  8088.         26h command can't be cancelled
  8089.         30h name defined by another process (OS/2)
  8090.         34h NetBIOS environment not defined, must issue reset (OS/2)
  8091.         35h required operating system resources exhausted (OS/2)
  8092.         36h maximum applications exceeded (OS/2)
  8093.         37h no SAPs available for NetBIOS (OS/2)
  8094.         38h requested resources not available (OS/2)
  8095.         FFh NetBIOS busy (command pending)
  8096. Note:    Sytek PCnet card uses DMA 3.
  8097. SeeAlso: INT 2A/AH=01h,INT 2A/AH=04h,INT 5B
  8098.  
  8099. Format of Network Control Block:
  8100. Offset    Size    Description
  8101.  00h    BYTE    command code (see below)
  8102.  01h    BYTE    return code
  8103.  02h    BYTE    local session number (LSN)
  8104.  03h    BYTE    "ncb_num" datagram table entry from ADD NAME
  8105.  04h    DWORD    -> I/O buffer
  8106.  08h    WORD    length of data in buffer
  8107.  0Ah 16 BYTEs    remote system to call
  8108.  1Ah 16 BYTEs    network name of local machine
  8109.  2Ah    BYTE    receive timeout in 1/2 seconds
  8110.  2Bh    BYTE    send timeout in 1/2 seconds
  8111.  2Ch    DWORD    -> FAR post handler    /* int (far *ncb_post)(); */
  8112.  30h    BYTE    network adapter number on which to execute command
  8113.         00h-03h IBM NetBIOS specs
  8114.         F0h-FFh Eicon NABios interface
  8115.  31h    BYTE    command completion code (see returned status above)
  8116.  32h 14 BYTEs    reserved for network card
  8117.  
  8118. Values for command code field in NCB (or with 80h for non-waiting call):
  8119.     10h start session with NCB_NAME name (call)
  8120.     11h listen for call
  8121.     12h end session with NCB_NAME name (hangup)
  8122.     14h send data via NCB_LSN
  8123.     15h receive data from a session
  8124.     16h receive data from any session
  8125.     17h send multiple data buffers
  8126.     20h send unACKed message (datagram)
  8127.     21h receive datagram
  8128.     22h send broadcast datagram
  8129.     23h receive broadcast datagram
  8130.     30h add name to name table
  8131.     31h delete name from name table
  8132.     32h reset adapter card and tables
  8133.     33h get adapter status (see structure "astatus" below)
  8134.     34h status of all sessions for name (see structure "sstatus" below)
  8135.     35h cancel
  8136.     36h add group name to name table
  8137.     70h unlink from IBM remote program (no F0h function)
  8138.     71h send data without ACK
  8139.     72h send multiple buffers without ACK
  8140.     78h find name
  8141.     79h token-ring protocol trace
  8142.  
  8143. Format of structure "name":
  8144. Offset    Size    Description
  8145.  00h 16 BYTEs "nm_name" symbolic name
  8146.  10h    BYTE  "nm_num" number associated with name
  8147.  11h    BYTE  nm_status
  8148.  
  8149. Format of structure "astatus":
  8150. Offset    Size    Description
  8151.  00h  6 BYTEs as_id
  8152.  06h    BYTE  as_jumpers
  8153.  07h    BYTE  as_post
  8154.  08h    BYTE  as_major
  8155.  09h    BYTE  as_minor
  8156.  0Ah    WORD  as_interval
  8157.  0Ch    WORD  as_crcerr
  8158.  0Eh    WORD  as_algerr
  8159.  10h    WORD  as_colerr
  8160.  12h    WORD  as_abterr
  8161.  14h    DWORD as_tcount
  8162.  18h    DWORD as_rcount
  8163.  1Ch    WORD  as_retran
  8164.  1Eh    WORD  as_xresrc
  8165.  20h  8 BYTEs as_res0
  8166.  28h    WORD  as_ncbfree
  8167.  2Ah    WORD  as_ncbmax
  8168.  2Ch    WORD  as_ncbx
  8169.  2Eh  4 BYTEs as_res1
  8170.  32h    WORD  as_sespend
  8171.  34h    WORD  as_msp
  8172.  36h    WORD  as_sesmax
  8173.  38h    WORD  as_bufsize
  8174.  3Ah    WORD  as_names
  8175.  3Ch 16 name structures     as_name
  8176.  
  8177. Format of structure "sstatus":
  8178. Offset    Size    Description
  8179.  00h    BYTE    number of sessions being reported
  8180.  01h    BYTE    number of sessions with this name
  8181.  02h    BYTE    number of outstanding receive datagrams
  8182.  03h    BYTE    number of outstanding ReceiveAnys
  8183.  04h    var    session structures (see below)
  8184.  
  8185. Format of structure "session":
  8186. Offset    Size    Description
  8187.  00h    BYTE    local session number
  8188.  01h    BYTE    state
  8189.         01h listen pending
  8190.         02h call pending
  8191.         03h session established
  8192.         04h hangup pending
  8193.         05h hangup done
  8194.         06h session aborted
  8195.  02h 16 BYTEs    local name
  8196.  12h 16 BYTEs    remote name
  8197.  22h    BYTE    number of outstanding receives
  8198.  23h    BYTE    number of outstanding sends/chainsends
  8199. ----------5C---------------------------------
  8200. INT 5C - TOPS INTERFACE
  8201.     ES:BX -> Network Control Block
  8202. Note:    TOPS card uses DMA 1, 3 or none.
  8203. ----------5C---------------------------------
  8204. INT 5C - ATALK.SYS - AppleTalk INTERFACE
  8205.     DX:BX -> control block (see below)
  8206. Return: none
  8207. Notes:    this driver can use any interrupt from 5Ch to 70h
  8208.     the signature 'AppleTalk' appears 16 bytes prior to the interrupt
  8209.       handler; this serves as the installation check
  8210.  
  8211. Format of AppleTalk control block:
  8212. Offset    Size    Description
  8213.  00h    WORD    command code
  8214.         01h "AT_INIT"        initialize the driver
  8215.         02h "AT_KILL"
  8216.         03h "AT_GETNETINFO" get current network info incl init status
  8217.         04h "AT_GETCLOCKTICKS"
  8218.         05h "AT_STARTTIMER"
  8219.         06h "AT_RESETTIMER"
  8220.         07h "AT_CANCELTIMER"
  8221.         10h "LAP_INSTALL"
  8222.         11h "LAP_REMOVE"
  8223.         12h "LAP_WRITE"
  8224.         13h "LAP_READ"
  8225.         14h "LAP_CANCEL"
  8226.         20h "DDP_OPENSOCKET"
  8227.         21h "DDP_CLOSESOCKET"
  8228.         22h "DDP_WRITE"
  8229.         23h "DDP_READ"
  8230.         24h "DDP_CANCEL"
  8231.         30h "NBP_REGISTER"
  8232.         31h "NBP_REMOVE"
  8233.         32h "NBP_LOOKUP"
  8234.         33h "NBP_CONFIRM"
  8235.         34h "NBP_CANCEL"
  8236.         35h "ZIP_GETZONELIST"
  8237.         36h "ZIP_GETMYZONE"
  8238.         37h "ZIP_TAKEDOWN"
  8239.         38h "ZIP_BRINGUP"
  8240.         40h "ATP_OPENSOCKET"
  8241.         41h "ATP_CLOSESOCKET"
  8242.         42h "ATP_SENDREQUEST"
  8243.         43h "ATP_GETREQUEST"
  8244.         44h "ATP_SENDRESPONSE"
  8245.         45h "ATP_ADDRESPONSE"
  8246.         46h "ATP_CANCELTRANS"
  8247.         47h "ATP_CANCELRESPONSE"
  8248.         48h "ATP_CANCELREQUEST"
  8249.         50h "ASP_GETPARMS"
  8250.         51h "ASP_CLOSESESSION"
  8251.         52h "ASP_CANCEL"
  8252.         53h "ASP_INIT"
  8253.         54h "ASP_KILL"
  8254.         55h "ASP_GETSESSION"
  8255.         56h "ASP_GETREQUEST"
  8256.         57h "ASP_CMDREPLY"
  8257.         58h "ASP_WRTCONTINUE"
  8258.         59h "ASP_WRTREPLY"
  8259.         5Ah "ASP_CLOSEREPLY"
  8260.         5Bh "ASP_NEWSTATUS"
  8261.         5Ch "ASP_ATTENTION"
  8262.         5Dh "ASP_GETSTATUS"
  8263.         5Eh "ASP_OPENSESSION"
  8264.         5Fh "ASP_COMMAND"
  8265.         60h "ASP_WRITE"
  8266.         61h "ASP_GETATTENTION"
  8267.         70h "PAP_OPEN"
  8268.         71h "PAP_CLOSE"
  8269.         72h "PAP_READ"
  8270.         73h "PAP_WRITE"
  8271.         74h "PAP_STATUS"
  8272.         75h "PAP_REGNAME"
  8273.         76h "PAP_REMNAME"
  8274.         77h "PAP_INIT"
  8275.         78h "PAP_NEWSTATUS"
  8276.         79h "PAP_GETNEXTJOB"
  8277.         7Ah "PAP_KILL"
  8278.         7Bh "PAP_CANCEL"
  8279.         
  8280.         or with the following flags
  8281.         8000h start command then return
  8282.         4000h wait for interrupt service to complete
  8283.  02h    WORD    returned status
  8284.         0000h success (already initialized if func 01h)
  8285.  04h    DWORD    pointer to completion function
  8286.  08h    WORD    network number
  8287.  0Ah    BYTE    node ID
  8288. ---if general func (01h,03h), control block continues:
  8289.  0Bh    BYTE    "inf_abridge"
  8290.  0Ch    WORD    "inf_config"
  8291.  0Eh    DWORD    pointer to buffer
  8292.  12h    WORD    buffer size
  8293. ---if DDP function (20h-24h), control block continues:
  8294.  0Bh    BYTE    "ddp_addr_socket"
  8295.  0Ch    BYTE    "ddp_socket"
  8296.  0Dh    BYTE    "ddp_type"
  8297.  0Eh    DWORD    pointer to buffer
  8298.  12h    WORD    buffer size
  8299.  14h    BYTE    "ddp_chksum"
  8300. ---if Name Binding Protocol (30h-34h), control block continues:
  8301.  0Bh    BYTE    "nbp_addr_socket"
  8302.  0Ch    WORD    "nbp_toget"
  8303.  0Eh    DWORD    pointer to buffer
  8304.  12h    WORD    buffer size
  8305.  14h    BYTE    "nbp_interval"
  8306.  15h    BYTE    "nbp_retry"
  8307.  16h    DWORD    "nbp_entptr"
  8308. ---if AppleTalk Transaction Protocol (42h), control block continues:
  8309.  0Bh    BYTE    "atp_addr_socket"
  8310.  0Ch    WORD    "atp_socket"
  8311.  0Eh    DWORD    pointer to buffer
  8312.  12h    WORD    buffer size
  8313.  14h    BYTE    "atp_interval"
  8314.  15h    BYTE    "atp_retry"
  8315.  16h    BYTE    ATP flags
  8316.         bit 5: exactly one transaction
  8317.  17h    BYTE    "atp_seqbit"
  8318.  18h    BYTE    transaction ID
  8319.  19h  4 BYTEs    ATP user bytes
  8320.  1Dh    BYTE    number of BDS buffers
  8321.  1Eh    BYTE    number of BDS responses
  8322.  1Fh    DWORD    pointer to BDS buffers (see below)
  8323.  
  8324. Format of Name Binding Protocol Name-to-Address binding entries for NBP_LOOKUP:
  8325. Offset    Size    Description
  8326.  00h    WORD    "tup_address_network"
  8327.  02h    BYTE    "tup_address_notid"
  8328.  03h    BYTE    "tup_address_socket"
  8329.  04h    BYTE    "tup_enum"
  8330.  05h 99 BYTEs    name
  8331.  
  8332. Format of BDS entries:
  8333. Offset    Size    Description
  8334.  00h    DWORD    pointer to buffer
  8335.  04h    WORD    size of buffer
  8336.  06h    WORD    BDS data size
  8337.  08h  4 BYTEs    "bds_userbytes"
  8338. ----------5C---------------------------------
  8339. INT 5C - IBM 802.2 INTERFACE (LLC)
  8340.     ES:BX -> CCB
  8341. Return: none
  8342.  
  8343. Format of CCB:
  8344. Offset    Size    Description
  8345.  00h    BYTE    adapter
  8346.  01h    BYTE    command code
  8347.  02h    BYTE    return code
  8348.  03h    BYTE    work
  8349.  04h    DWORD    pointer to ???
  8350.  08h    DWORD    pointer to completion function???
  8351.  0Ch    DWORD    pointer to parameters???
  8352. ----------5C---------------------------------
  8353. INT 5C - $25 LAN - INSTALLATION CHECK
  8354. Notes:    current versions only check whether the vector is 0000h:0000h or not
  8355.     future versions are supposed to have the signature "NET" in the three
  8356.       bytes preceding the INT 5C handler
  8357. ----------5C04-------------------------------
  8358. INT 5C - $25 LAN - CHECK IF CONNECTION ALIVE
  8359.     AH = 04h
  8360.     AL = COM port (0 = default)
  8361.     CX = wait count in character times (should be at least 100)
  8362. Return: ZF set if link alive
  8363. ----------5D---------------------------------
  8364. INT 5D - IRQ13 relocated by DESQview 2.26+
  8365. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  8366. SeeAlso: INT 50"DESQview",INT 75
  8367. ----------5D---------------------------------
  8368. INT 5D - IRQ5 relocated by DoubleDOS
  8369. SeeAlso: INT 0D,INT 5C"DoubleDOS"
  8370. ----------5E---------------------------------
  8371. INT 5E - IRQ14 relocated by DESQview 2.26+
  8372. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  8373. SeeAlso: INT 50"DESQview",INT 76
  8374. ----------5E---------------------------------
  8375. INT 5E - IRQ6 relocated by DoubleDOS
  8376. SeeAlso: INT 0E,INT 5D"DoubleDOS"
  8377. ----------5F---------------------------------
  8378. INT 5F - IRQ15 relocated by DESQview 2.26+
  8379. Note:    this is the default, but other INTs may be used (see INT 50"DESQview")
  8380. SeeAlso: INT 50"DESQview",INT 77
  8381. ----------5F---------------------------------
  8382. INT 5F - IRQ7 relocated by DoubleDOS
  8383. SeeAlso: INT 0F,INT 5E"DoubleDOS"
  8384. ----------60---------------------------------
  8385.